Вычисление расстояния векторов вдоль произвольной нормали

#math #vector #3d

#математика #вектор #3D

Вопрос:

Я пытаюсь создать функцию для выдавливания грани вдоль нормали, перетаскивая мышь. Для целей вопроса я упростил задачу до 2D-векторов, так что вид смотрит вниз на куб, а нормаль — это грань для выдавливания.

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

У меня есть два вектора (A amp; B1). A — начальная точка, а B1 — текущее положение мыши (см. Проекция векторного изображения по нормали). Мне нужно спроецировать B1 так, чтобы он указывал вдоль направления нормали к лицу из точки A. Таким образом, B1 становится B2. Это также будет иметь место для положения мыши Bx (Bx необходимо спроецировать из A по нормали, чтобы оно стало B2). Это будет означать, что независимо от того, находится ли мышь в точке B1, B2 или Bx, все они будут давать одинаковое расстояние вдоль нормального направления (в данном случае 2).

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

Спасибо.

Комментарии:

1. @double-beep Интересно, можете ли вы объяснить, почему вы удалили правку, которую я внес в вопрос, где я описываю, как я в конечном итоге решил проблему? Конечно, это было бы полезно для тех, кто сталкивается с этим вопросом, у кого может возникнуть аналогичный.

Ответ №1:

Длина проекции w=AB1 вектора на линию AB2 , имеющую нормализованный вектор направления (единичная длина) e , очень проста с использованием скалярного произведения:

 L = (w.dot.e) 
 

возможно, у вас уже есть e , если вы знаете угол — в 2D его компоненты:

 e = (cos(fi), sin(fi))