#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))