2014-02-06 6 views
0

Попытка найти расстояние от точки a до точки b, заданной произвольной осью. У меня есть несколько фотографий, чтобы помочь мне лучше объяснить:Как я могу получить расстояние от точки a до точки b на пользовательской (относительной) оси?

one

Я пытаюсь найти расстояние от красного до розового (или серого) на два пользовательских осях. Ось от красного до зеленого (ось RG) и ось от красного до синего (ось RB).

two three

ответ

4

Вы спрашиваете о vector projection.

Данные два вектора A и B, что такое A, проецируется на B?

In this picture A is projected onto B.

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

Расчет этой проекции, как правило, включает в себя скалярное произведение. К счастью для вас, Unity предоставляет Vector3.Dot, чтобы сделать это легко.

Мы можем вычислить проекцию как скаляр. A «это много» в направлении B:

float projScalar = Vector3.Dot(A, B.normalized); 

Это дает нам длину, о которой вы просите.

В случае необходимости, мы можем преобразовать этот результат в вектор, литье, что длина в направлении B:

Vector3 projVector = B.normalized * projScalar; 
Смежные вопросы