Эффективно рассчитать разницу между двумя векторами - PullRequest
0 голосов
/ 03 сентября 2018

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

Более конкретно, ориентация поверхности представлена ​​вектором, а источник света также задан вектором. Общеизвестно, что поверхность ярче всего, когда свет падает прямо на нее, или когда разность углов векторов равна 0.

Однако в моем текущем решении мне нужно рассчитать atan () шесть раз для каждого источника света, чтобы получить разницу, которая вычислительно неэффективна.

Есть ли лучший способ?

1 Ответ

0 голосов
/ 03 сентября 2018

Я думаю, что есть. Посмотрите закон косинусов Ламберта . Это говорит о том, что интенсивность света от рассеянной поверхности - это просто косинус угла между вектором света (указывающим на источник света) и вектором нормали от плоскости. Итак, все, что вам нужно сделать, это нормализовать векторы и взять скалярное произведение.

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