Мне нужно уточнение с алгоритмом, генерирующим случайные значения для моего луча-трассировщика.
Я испускаю лучи из одной точки. И у меня есть проблема с распределением этих лучей: мне нужно, чтобы распределение было равномерным, но это не...
Проблема, с которой я сталкиваюсь сейчас, состоит в том, что распределение, являющееся однородным, изначально неоднозначно после моих искажений пространства результатов.
Так, например, я генерирую r и t углы, если полярная система координат. Распределение неравномерно и не может быть равномерным: пространство, близкое к каждому полюсу, имеет гораздо большую плотность результатов, чем, скажем, близко к экватору. Причина довольно ясна: я преобразовываю равномерно распределенные точки из цилиндрического пространства в сферическое. И я искажаю результаты. Та же проблема заключается в том, что я нормализую точки, созданные случайным образом в кубе.
Теперь моя идея: я хочу создать тетраэдр, нормализовать его вершины, разделить каждую грань (треугольник) с точкой посередине, нормализовать ее и повторить рекурсивно, пока у меня не будет достаточно очков. Затем я немного "искажаю" эти точки. Затем я нормализую их снова. Это.
Я понимаю, что этот метод не является чисто математическим методом Монте-Карло, потому что я не использую случайное распределение ни на одном шаге, кроме последнего. И мне не нравится это решение для этой сложности.
Может ли кто-нибудь предложить что-нибудь более простое, но все же
- случайное
- равномерная
- быстро
- просто
Спасибо!
EDIT:
Мне нужен быстрый метод, а не только правильный. Вот почему я спрашиваю о Монте-Карло. Предоставленные ответы являются правильными, но не быстрыми. Метод с тетраэдром является быстрым, но не очень "случайным" = > неверным.
Мне действительно нужно что-то более подходящее.