leo Длина то длиной, но ведь точки распределяются по площади. И сходимость по-моему обусловлена кривизной поверхности. Кто-же с этим спорит, но снова для нас важна площадь, а не длина. Советую, почитай пост aa_dav, где он пишет, что важна площадь внешней стороны сечения, и где приводится алгоритм доказывающий это. Площадь сферы = 4*PI*R^2. (2*PI*R) * (2*R). Произведение длины окружности на высоту, то есть по сути формула цилиндра. Площадь внешней стороны сечения стремиться к длине окружности радиуса R. Так что объяснение сгустков совсем не в сужении длин окружностей, а так как полюс это центр вращения.
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: Надеюсь прежде чем отвечать, ты все таки малость подумашь и чертежики порисуешь, иначе боюсь на очередной "об стену горох" у меня терпения не хватит
leo Раз я такой тупой и упертый, не мог бы ты нарисовать то что ты имеешь ввиду? А то я боюсь, что иначе твой уровня дзена мне не понять. ^) Я бы и рад, но слова вроде понятные, но что ты хочешь сказать не понимаю. Я где-то говорил, что с неба? Это по-моему очевидно, но у шара нет разбивки по вертикальному углу, если конечно я правильно понял твою формулировку.
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
"Феномен" сгущения легче понять в 2-мерном варианте: попробуйте накрыть точками круг равномерным распределением в полярных координатах.
ёлки-палки! x = r * cos phi y = r * sin phi z = r * cos theta задаёмся r, phi, theta - и задача решена.
При этом нужно учитывать, что плотность постоянная, то есть max_theta, max_phi ~ 2*pi*r Отсюда: первым берём r. После этого считаем max_phi, max_theta Затем вычисляем phi = rand() * max_phi, theta = rand*max_theta. После этого уже переходим к переводу сферических координат в декартовые.
_DEN_, я уже написал, как задача решается. r задаётся как рандомное, а от него уже зависит величина рандомных phi и theta.
SadKo Хы. Так смысл задачи-то и есть в том, чтобы для углов найти случайную величину с правильным распределением
Полное решение задачи: 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.
green Попробовал, сколько не искал, сгустков так и не обнаружил. Полярный координаты задаются углом и расстоянием на векторе. Если мы находим случайный угол, то не понятно откуда там должны взяться сгустки. Если же мы начнём искать не угол, а случайное значение например по оси X, то сгустки нам обеспечены. В 3D с двумя углами Эйлера, сгущения вносит именно второй угол, как ранее заметил leo по причине разных радиусов сечений. Кроме того высота сечений по оси Z в этом случае не одинакова, так как их разбивка происходит по одинаковым расстояниям на поверхности шара, а следовательно их площади растут от полюсов. В случае же равномерного разбиения по оси Z, свои коррективы вносит кривизна поверхности шара, так как несмотря на то что радиус сечения уменьшается, но площадь его остаётся неизменной.
Booster Я просто накидал точек ( r cos(a), r sin(a) ), при равномерном распределении r и a. Код в Mathematica: Код (Text): ListPlot[Table[r = 100 * Random[]; a = 2 * Pi *Random[]; {r Cos[a], r Sin[a]}, {5000}], AspectRatio -> 1]
Сорри, вернее будет так: x = r*cos(phi)*sin(theta), y = r*sin(phi)*sin(theta), z=r*sin(theta). Остальное должно остаться в силе.
SadKo Это не сфера, а шар Да еще и в какой-то "неканонический" записи, т.к. в x и y д.б. cos(theta), а не sin Шаги 2-4 бестолковые, т.к. в итоге все равно получаются два угла, равномерно распределенные в интервале 0..2*pi и соотв-но вычисление длин окружностей и последующая нормировка ничего не дают. Шаги 1 и 5 непонятные, т.к. в итоге получается шар, а не сфера. Поэтому либо r должно быть фиксированным (тогда придем к тому с чего начали - сгущению точек у полюсов), либо нужно как-то проецировать точки на сферу и думать будет ли при этом распределение точек по сфере равномерным
Люди здесь совсем математику не знают? Если нужна равномерно распределенная на сфере случайная величина, то нужно взять 3 независимых нормально распределенных случайных величины (в инете можно найти способы их получения) и нормировать получившийся вектор (педанты в случае нулевого вектора могут повторить попытку). Есть способы и эффективнее, то этот работает в пространстве любой размерности. PS. Если нужен шар, то случайный вектор на сфере нужно домножить на r^{1/n}, где n - размерность шара (3), а r - равномерно распределено на отрезке [0;1].