Сдвинуть точку А к точке Б на заданую дистанцию

Даны 2 точки Vector3 А и Б, которые представляют собой Vector3 Необходимо А сдвинуть в сторону Б на заданую дистанцию.

В начале думал, что нужно просто прибавить дистанцию к координатам вектора А, но мне почему-то кажется, что я получу не совсем то, что нужно.


Ответы (2 шт):

Автор решения: MBo

Нормализуем вектор от 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)

→ Ссылка