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

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

  1. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    leo
    Длина то длиной, но ведь точки распределяются по площади. И сходимость по-моему обусловлена кривизной поверхности.

    Кто-же с этим спорит, но снова для нас важна площадь, а не длина.

    Советую, почитай пост aa_dav, где он пишет, что важна площадь внешней стороны сечения, и где приводится алгоритм доказывающий это.

    Площадь сферы = 4*PI*R^2. (2*PI*R) * (2*R). Произведение длины окружности на высоту, то есть по сути формула цилиндра. Площадь внешней стороны сечения стремиться к длине окружности радиуса R.

    Так что объяснение сгустков совсем не в сужении длин окружностей, а так как полюс это центр вращения.
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Booster
    Мда, похоже ты уперся и пытаешься оспаривать очевидные вещи

    Кривизна поверхности сферы в любой точке одинакова. Кривизна любых сечений большого круга (в т.ч.меридиональных) тоже одинакова. Кривизна сечений параллелями ес-но разная и определяется как раз зависимостью радиуса окружности параллели от вертикального угла (геоцентрической широты или зенитного угла) - чем ближе к полюсу тем меньше радиус

    А я тебе советую пошевилить собственным извилинами, а не повторять постулаты, не понимая их смысла ;)
    Повторяю для непонятливых - площадь сечения зависит от того, как мы это сечение проводим.
    Грубо говоря площадь сечения пропорциональна длине окружности и ширине кольца (длине дуги меридиана). Поэтому если используется равномерная разбивка по вертикальному углу, то ширина кольца фиксирована (длина дуги меридиана = R*dB, где dB - фикс.дискрет по вертик.углу) и соотв-но площадь кольца уменьшается от экватора к полюсам. Это можно доказать совершенно строго в терминах дифф.геометрии, представив площадь кольца в виде интеграла (суммы) по элементам поверхности, которые в данном случае будут представлять собой сферические трапеции с фикс.высотой R*dB и длиной основания R*Cos(B)*dPhi и соотв-но площадь трапеции будет пропорциональна R^2*Cos(B)*dPhi*dB, т.е. зависит от B. Если эти "абстракции" тебе не понятны, то остается только взять глобус и сравнить площади трапеций около экватора и полюса при одинаковой разности широт. Поэтому и получается, что если генерировать равномерное распределение по вертик.углу, то и радиусы параллелей и площади соответствующих сечений (колец) уменьшаются к полюсам, что и приводит к сгущению точек у полюсов.
    Если ты сам внимательно почитаешь пост aa_dav, то поймешь, что речь в нем идет о других сечениях - не фиксированными приращениями вертикальных углов, а фиксированными приращениями по оси Z, проходящей через полюсы сферы. Нарисовав элементарный чертежик меридионального сечения, ты поймешь, что в этом случае высота элементарной сферич.трапеции будет не постоянной, а пропорциональной R*dZ/Cos(B), т.е. будет увеличиваться с ростом B и таким образом компенсировать уменьшение радиуса параллели, т.к. площадь элементарной трапеции теперь будет ~ {R*Cos(B)*dPhi}*{R*dZ/Cos(B)}=R^2*dPhi*dZ - не зависит от B. Другими словами тезис о постоянстве площади сечения при равномерном шаге по dZ, не с неба свалился, а является следствием все той же элементарной геометрии - уменьшения радиуса параллелей и пропорционального увеличении дуг меридианов при движении от экватора к полюсу

    PS: Надеюсь прежде чем отвечать, ты все таки малость подумашь и чертежики порисуешь, иначе боюсь на очередной "об стену горох" у меня терпения не хватит ;)
     
  3. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    leo
    Раз я такой тупой и упертый, не мог бы ты нарисовать то что ты имеешь ввиду?
    А то я боюсь, что иначе твой уровня дзена мне не понять. ^)

    Я бы и рад, но слова вроде понятные, но что ты хочешь сказать не понимаю.

    Я где-то говорил, что с неба?

    Это по-моему очевидно, но у шара нет разбивки по вертикальному углу, если конечно я правильно понял твою формулировку.
     
  4. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Booster
    Во-первых, под "вертикальным углом" подразумевается либо геоцентрическая широта точки, т.е. угол между вектором на точку и плоскостью экватора, либо зенитный угол, т.е. угол между вектором и "северным" направлением луча, соединяющего полюсы сферы.
    Во-вторых, генерация равномерно распределенного "вертик.угла" (не важно откуда его считать от экватора или от зенита) как раз эквивалентна его "равномерной разбивке". Это особенно наглядно и очевидно при использовании целых чисел, например, целых градусов - в этом случае точки в меридиональном направлении будут (в среднем) расположены равномерно на равных расстояниях R*Pi/180 и соотв-но "ширина колец" будет одинаковой. И соотв-но останется только зависимость от радиуса кольца, т.е. если на каждое значение вертик.угла генерится одно равномерно распределенное значение угла в плоскости экватора, то среднее число точек в каждом кольце будет одинаковым, но из-за различия радиусов колец линейное расстояние между ними на экваторе будет больше, а у полюсов меньше

    Да как-то лениво, тем более что ты и сам можешь запросто на бумажке нарисовать ;) Может так на скорую руку поймешь:
    /|
    dM /_| dZ

    dM - дуга меридиана, dZ - ее проекция на ось, т.е.приращение Z-координаты
    Для бесконечно мылых приращений dM и dZ справедливо соотношение dZ=dM*Cos(B), где B - угол между вектором на точку и плоскостью экватора. Соотв-но при генерации равномерных углов B мы и генерим равномерные dM и получаем неравномерные dZ. А при использовании алгоритма aa_dav, наоборот генерятся равномерные dZ и соотв-но получаются неравномерные dM. Вывод: раз в алгоритме aa_dav площади колец получаются равные, то они никак не могут быть равными при генерации угла B
     
  5. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    "Феномен" сгущения легче понять в 2-мерном варианте: попробуйте накрыть точками круг равномерным распределением в полярных координатах.
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    leo
    Теперь всё стало предельно ясно. Спасибо что втемяшил.
     
  7. SadKo

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

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    ёлки-палки!
    x = r * cos phi
    y = r * sin phi
    z = r * cos theta

    задаёмся r, phi, theta - и задача решена.
     
  8. SadKo

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

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    При этом нужно учитывать, что плотность постоянная, то есть max_theta, max_phi ~ 2*pi*r
    Отсюда: первым берём r.
    После этого считаем max_phi, max_theta
    Затем вычисляем phi = rand() * max_phi, theta = rand*max_theta.

    После этого уже переходим к переводу сферических координат в декартовые.
     
  9. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    SadKo

    Ага, иными словами - для того чтобы решить задачу достаточно просто решить задачу! :-D
     
  10. SadKo

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

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    _DEN_, я уже написал, как задача решается.
    r задаётся как рандомное, а от него уже зависит величина рандомных phi и theta.
     
  11. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    SadKo

    Хы. Так смысл задачи-то и есть в том, чтобы для углов найти случайную величину с правильным распределением :)
     
  12. SadKo

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

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Полное решение задачи:

    1. находим r = rand() * MAX_R;
    2. вычисляем длины окружностей для данного R: max_l = 2*pi*r.
    3. находим рандомные l_phi = max_l*rand(), l_theta = max_l*rand().
    4. выражаем phi, theta (нормируем до 2*pi): phi = l_phi/r, theta = l_theta/r .
    5. вычисляем декартовые координаты: x = r*cos(phi), y = r*sin(phi), z=r*sin(theta).

    условие: rand() возвращает вещественное число от 0 до 1.
     
  13. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    green
    Попробовал, сколько не искал, сгустков так и не обнаружил. Полярный координаты задаются углом и расстоянием на векторе. Если мы находим случайный угол, то не понятно откуда там должны взяться сгустки. Если же мы начнём искать не угол, а случайное значение например по оси X, то сгустки нам обеспечены.

    В 3D с двумя углами Эйлера, сгущения вносит именно второй угол, как ранее заметил leo по причине разных радиусов сечений. Кроме того высота сечений по оси Z в этом случае не одинакова, так как их разбивка происходит по одинаковым расстояниям на поверхности шара, а следовательно их площади растут от полюсов. В случае же равномерного разбиения по оси Z, свои коррективы вносит кривизна поверхности шара, так как несмотря на то что радиус сечения уменьшается, но площадь его остаётся неизменной.
     
  14. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Booster
    Гм... у меня вот такое получилось:
     
  15. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    SadKo

    Это циллиндр, а не сфера.
     
  16. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    green
    Значит я тебя не так понял.
     
  17. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Booster
    Я просто накидал точек ( r cos(a), r sin(a) ), при равномерном распределении r и a.
    Код в Mathematica:
    Код (Text):
    1. ListPlot[Table[r = 100 * Random[]; a = 2 * Pi *Random[]; {r Cos[a], r Sin[a]}, {5000}], AspectRatio -> 1]
     
  18. SadKo

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

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Сорри, вернее будет так:

    x = r*cos(phi)*sin(theta), y = r*sin(phi)*sin(theta), z=r*sin(theta).

    Остальное должно остаться в силе.
     
  19. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    SadKo
    Это не сфера, а шар ;) Да еще и в какой-то "неканонический" записи, т.к. в x и y д.б. cos(theta), а не sin

    Шаги 2-4 бестолковые, т.к. в итоге все равно получаются два угла, равномерно распределенные в интервале 0..2*pi и соотв-но вычисление длин окружностей и последующая нормировка ничего не дают.
    Шаги 1 и 5 непонятные, т.к. в итоге получается шар, а не сфера. Поэтому либо r должно быть фиксированным (тогда придем к тому с чего начали - сгущению точек у полюсов), либо нужно как-то проецировать точки на сферу и думать будет ли при этом распределение точек по сфере равномерным
     
  20. halyavin

    halyavin New Member

    Публикаций:
    0
    Регистрация:
    13 май 2005
    Сообщения:
    252
    Адрес:
    Russia
    Люди здесь совсем математику не знают? Если нужна равномерно распределенная на сфере случайная величина, то нужно взять 3 независимых нормально распределенных случайных величины (в инете можно найти способы их получения) и нормировать получившийся вектор (педанты в случае нулевого вектора могут повторить попытку).
    Есть способы и эффективнее, то этот работает в пространстве любой размерности.
    PS. Если нужен шар, то случайный вектор на сфере нужно домножить на r^{1/n}, где n - размерность шара (3), а r - равномерно распределено на отрезке [0;1].