Алгоритм проецирования света и определения, попадает ли в него данная точка - PullRequest
6 голосов
/ 25 июля 2010

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

Кроме того, я предполагаю, что большинство (все?) Алгоритмов работают в 2D / 3D, но можно ли использовать тот, который работает в N-мерном пространстве? Меня интересует только возможность его использования для произвольного числа измерений с разумной сложностью.

1 Ответ

2 голосов
/ 25 июля 2010

Предполагая, что у вас есть нормализованный вектор n, указывающий в направлении светового конуса, источник света на Pl и контрольная точка на Pp, а угол полуконуса theta вы можететакой тест (независимо от размерности вашего пространства):

vector Vl = Pl + n
vector Vp = Pp - Pl

phi = acos(dot(Vl, Vp) / (||Vl|| * ||Vp||))

if phi <= theta
  p in light cone
else
  p not in light cone

Здесь точка (a, b) - это произведение двух векторов (a1 * b1 + ... + an * bn)) и || a ||является величиной вектора a, sqrt (a1 * a1 + ... + an * an).

Основная идея состоит в том, чтобы выяснить угол между осевой линией светового пучка и вектором светаисточник в точку интереса.Если этот угол больше, чем угол прожектора (наполовину), интересующий объект находится за пределами луча - в противном случае он находится внутри.

Обратите внимание, что настоящие источники света не так сильно срезаются, но этоначать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...