Изменение длины геометрического вектора

Есть функция setLength для изменения длины вектора (геометрического) на указанный параметром без изменения его направления.

Вот функция

Vector2f setLength(Vector2f startPos, Vector2f currentPos, double neededLength)
{
    double currentLength = getLength(startPos, currentPos); 
    //getLength - отдельная написанная мною функция, возвращает длину вектора

    double factorLength = neededLength / currentLength; 
    //factorLength - коэффициент разности нужной длины и текущей

    return Vector2f(currentPos.x * factorLength, currentPos.y * factorLength);
}

сама функция должна возвращать координаты конца вектора при заданной длине и с тем же направлением

но почему то итоговая длина вектора не соответствует нужной (то больше, то меньше). Кроме этого само направление вектора изменяется. Это точно не ошибка в getLength, там все максимально просто (длина вектора по теореме Пифагора), но все же ее я тоже укажу

double getLength(Vector2f firstdot, Vector2f seconddot)
{
    return sqrt(pow(firstdot.x - seconddot.y, 2) + pow(firstdot.y - seconddot.y, 2));
}

Заранее спасибо


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

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

Потому что Вы не знаете, что такое "вектор".

return Vector2f(
  (currentPos.x - startPos.x) * factorLength + startPos.x, 
  (currentPos.y - startPos.y) * factorLength + startPos.y
);
→ Ссылка