Универсальная форма, случайная (Монте-Карло) распределение на сфере единицы

Вы должны никогда , используют исключение, если Вы не имеете к - издержки ужасны.

изменения на TryParse решают проблему - если Вы хотите стать творческими (чтобы заставить Ваш код выглядеть более изящным), Вы могли бы, вероятно, сделать что-то с дополнительным методом в 3,5 кроме кода, будет более или менее то же.

9
задан avp 3 December 2009 в 18:23
поделиться

3 ответа

Вот алгоритм, который позволяет вам генерировать точки, случайно распределенные на единичной сфере.

10
ответ дан 4 December 2019 в 09:36
поделиться

Если вы не отслеживаете только тривиальные сцены, будет ли время рендеринга зависеть от времени выбора сэмплов? Если нет, то, вероятно, еще не стоит оптимизировать, хотя стоит прочитать и понять методы унифицированной выборки, приведенные в других ответах.

Кроме того, ваши выборки не должны быть очень случайными, чтобы дать хорошую оценку какой бы функции вы отбор проб. Вы можете захотеть исследовать с помощью квазислучайной числовой последовательности, такой как последовательность Халтона . Ваша идея деления тетраэдра неплохая. Это должно привести к хорошо распределенным точкам, которые должны быть лучше, чем однородные псевдослучайные образцы для большинства сцен, хотя могут привести к ужасающим артефактам в некоторых обстоятельствах.

В любом случае вам действительно следует проконсультироваться на форумах на ompf.org. У нас есть несколько супер-хардкорных ботаников по трассировке лучей.

2
ответ дан 4 December 2019 в 09:36
поделиться

Для сферических сечений генерируйте угол равномерно в phi (полярный угол) и cos (theta) (для theta азимутальный угол) между ваши пределы.

В псевдокоде:

phi = phi_low_limit        + rand()*(phi_high_limit       - phi_low_limit)
ct = cos(theta_high_limit) + rand()*(cos(theta_low_limit) - cos(theta_high_limit))
// The order is inverted here because cos heads down for increasing theta
theta = arccos(ct)

Это частный случай правила, которое говорит инвертировать якобиан и равномерно генерировать в этом пространстве те координаты.

] Примечание: обратите внимание, что я использую противоположное соглашение для phi и theta из строки Дэвида Нормана.

Также обратите внимание: на самом деле это не самый быстрый метод, а скорее тот, который иллюстрирует общий принцип.

1
ответ дан 4 December 2019 в 09:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: