Равномерное распределение точек на сфере

Тема в разделе "WASM.HEAP", создана пользователем _DEN_, 6 мар 2009.

  1. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Короче, вот вам решение:
    Код (Text):
    1. #define MAX_POINTS      4000
    2. #define RADIUS          1.0
    3.  
    4. typedef struct point_t
    5. {
    6.     float x, y, z, r, g, b;
    7. } point_t;
    8.  
    9. point_t points[MAX_POINTS];
    10.  
    11. float square(float x)
    12. {
    13.     return x*x;
    14. }
    15.  
    16.  
    17. point_t *finalize_p(point_t *p)
    18. {
    19.     p->r = gen_random()*0.75+0.25;
    20.     p->g = gen_random()*0.75+0.25;
    21.     p->b = gen_random()*0.75+0.25;
    22.  
    23.     return ++p;
    24. }
    25.  
    26. void GenMesh()
    27. {
    28.     srand(clock());
    29.  
    30.     float x=-1;
    31.  
    32.     for (point_t *p = &points[0]; p<&points[MAX_POINTS]; )
    33.     {
    34.         float x = gen_random()*2-1;
    35.         float max_r  = sqrt(1 - square(x));
    36.  
    37.         p->x = x*RADIUS;
    38.  
    39.         float angle = gen_random() * 2 * M_PI;
    40.  
    41.         p->y = max_r*RADIUS*cosf(angle); //* cosf(gen_random() * 2 * M_PI) * RADIUS;//y;
    42.         p->z = max_r*RADIUS*sinf(angle);//sqrt(1-square(p->x)-square(p->y));
    43.         p = finalize_p(p);
    44.     }
    45. }
    46.  
    47. float gen_random()
    48. {
    49.     return float(rand())/(RAND_MAX-1);
    50. }
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    SadKo
    Молодец, возьми с полки пирожок - за неоценимый вклад в реализацию алгоритма, озвученного aa_dav 5 днями и 2 страницами ранее в #30 и #46:lol: