Как я могу получить расстояние от точки a до точки b на пользовательской (относительной) оси?
Попытка найти расстояние от точки a до точки b по заданной оси. У меня есть несколько фотографий, которые помогут мне лучше объяснить:
Я пытаюсь найти расстояние от красного до розового (или серого) по двум осям. Ось от красного до зеленого (ось RG) и ось от красного до синего (ось RB).
1 ответ
Вы спрашиваете о векторной проекции.
Учитывая два вектора A
а также B
, что такое A
проецируется на B
?
В твоем случае, A
кажется разница между красным и розовым, где B
это то, что вы называете пользовательской осью.
При расчете этого прогноза обычно используется точечный продукт. К счастью для вас, Unity обеспечивает Vector3.Dot
чтобы сделать это легко.
Мы можем рассчитать проекцию как скаляр. A "это много" в направлении B:
float projScalar = Vector3.Dot(A, B.normalized);
Это дает нам длину, о которой вы спрашиваете.
При необходимости мы можем преобразовать этот результат в вектор, приведя эту длину в направлении B:
Vector3 projVector = B.normalized * projScalar;