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