Сдвинуть точку А к точке Б на заданую дистанцию
Даны 2 точки Vector3
А и Б, которые представляют собой Vector3
Необходимо А сдвинуть в сторону Б на заданую дистанцию.
В начале думал, что нужно просто прибавить дистанцию к координатам вектора А, но мне почему-то кажется, что я получу не совсем то, что нужно.
Ответы (2 шт):
Нормализуем вектор от A к B (сделаем единичной длины) и прибавим к A вектор длины Dist и с нужным направлением
AB = B - A
uAB = AB / AB.Magnitude
C = A + Dist * uAB
В коде:
Vector3D A = new Vector3D(0, 0, 0);
Vector3D B = new Vector3D(3, 4, 5);
Vector3D AB = B - A;
AB.Normalize();
double Dist = 2.0;
Vector3D C = A + Dist*AB;
Console.WriteLine(C.X +" " + C.Y + " " + C.Z);
Console.ReadKey();
>>0.848528137423857 1.13137084989848 1.41421356237309
Шаг первый: найти направление из точки А в точку Б. Таких векторов бесконечно много, различающихся длиной. Один из них это разность между векторами Б и А, то есть Б-А
(в ответе MBo это строка AB = B - A
)
Шаг второй: придать этому вектору заданную длину/дистанцию. Нужно этот вектор разделить на его собственную длину/модуль, и умножить на заданную длину. Иногда этот шаг разбивают на два: 1) разделить на собственную длину, то есть получить единичный вектор направления (AB.Normalize()
) 2) умножить на заданную длину, то есть отмасштабировать (Dist*AB
).
Шаг третий: Сделать так, чтоб этот вектор выходил из точки А, а не из начал координат, то есть прибавить к А (C = A + Dist*AB
)