Использование скалярного произведения ненормализованных векторов для проецирования точки на линию?

Я пытаюсь определить, пересекает ли линия круг, и для этого я пытаюсь сначала вычислить, находится ли точка (центр круга) в пределах линии при проецировании на линию.

Я нашел пример того, как это делается здесь, но у меня возникли проблемы с пониманием его части. . Он создает два вектора: от одного конца линии до точки и от одного конца линии до другого. Хорошо.

vec2 vecToPoint = point - lineA;
vec2 vecLine = lineB - lineA;

Но затем он берет скалярное произведение этих двух векторов и делит их, используя результат как смещение вдоль линии для спроецированной точки.

float coef = dot(vecToPoint,vecLine) / dot(vecLine,vecLine);
return vec2( lineA.x + (coef * vecLine.x), lineA.y + (coef * vecLine.y) );

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

Может кто-нибудь объяснить мне, как это работает? Что он здесь делает?


person Nairou    schedule 15.03.2016    source источник


Ответы (1)


Наконец-то я нашел видео, объясняющее математика позади этого. Теперь это имеет смысл!

person Nairou    schedule 16.03.2016