Вы должны никогда , используют исключение, если Вы не имеете к - издержки ужасны.
изменения на TryParse решают проблему - если Вы хотите стать творческими (чтобы заставить Ваш код выглядеть более изящным), Вы могли бы, вероятно, сделать что-то с дополнительным методом в 3,5 кроме кода, будет более или менее то же.
Вот алгоритм, который позволяет вам генерировать точки, случайно распределенные на единичной сфере.
Если вы не отслеживаете только тривиальные сцены, будет ли время рендеринга зависеть от времени выбора сэмплов? Если нет, то, вероятно, еще не стоит оптимизировать, хотя стоит прочитать и понять методы унифицированной выборки, приведенные в других ответах.
Кроме того, ваши выборки не должны быть очень случайными, чтобы дать хорошую оценку какой бы функции вы отбор проб. Вы можете захотеть исследовать с помощью квазислучайной числовой последовательности, такой как последовательность Халтона . Ваша идея деления тетраэдра неплохая. Это должно привести к хорошо распределенным точкам, которые должны быть лучше, чем однородные псевдослучайные образцы для большинства сцен, хотя могут привести к ужасающим артефактам в некоторых обстоятельствах.
В любом случае вам действительно следует проконсультироваться на форумах на ompf.org. У нас есть несколько супер-хардкорных ботаников по трассировке лучей.
Для сферических сечений генерируйте угол равномерно в 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 из строки Дэвида Нормана.
Также обратите внимание: на самом деле это не самый быстрый метод, а скорее тот, который иллюстрирует общий принцип.