Изменение длины геометрического вектора
Есть функция 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
);