Я пытаюсь определить, пересекает ли линия круг, и для этого я пытаюсь сначала вычислить, находится ли точка (центр круга) в пределах линии при проецировании на линию.
Я нашел пример того, как это делается здесь, но у меня возникли проблемы с пониманием его части. . Он создает два вектора: от одного конца линии до точки и от одного конца линии до другого. Хорошо.
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) );
Это та часть, которую я не понимаю. Я делал скалярные произведения нормализованных векторов, чтобы получить угол, но я никогда раньше не видел ненормализованных векторов в скалярном произведении, а тем более деления результатов.
Может кто-нибудь объяснить мне, как это работает? Что он здесь делает?