Подтвердить что ты не робот

Расширьте сегмент линии на определенное расстояние

Я пытаюсь найти способ расширить сегмент линии на определенное расстояние. Например, если у меня есть сегмент линии, начинающийся с 10,10, до 20,13, и я хочу увеличить длину на 3, как я могу вычислить новую конечную точку. Я могу получить длину sqrt (a ^ 2 + b ^ 2) в этом примере 10.44, так что, если бы я хотел узнать новую конечную точку с 10,10 с длиной 13,44, что было бы вычислительно самым быстрым способом? Я также знаю склон, но не знаю, поможет ли это мне в этом случае.

4b9b3361

Ответ 1

Вы можете сделать это, найдя единичный вектор вашего сегмента линии и масштабируя его до нужной длины, а затем переведя конечную точку вашего сегмента линии с помощью этого вектора. Предположим, что конечные точки вашего сегмента линии A и B и вы хотите продлить после конечной точки BlenAB - длина сегмента строки).

#include <math.h> // Needed for pow and sqrt.
struct Point
{
    double x;
    double y;
}

...

struct Point A, B, C;
double lenAB;

...

lenAB = sqrt(pow(A.x - B.x, 2.0) + pow(A.y - B.y, 2.0));
C.x = B.x + (B.x - A.x) / lenAB * length;
C.y = B.y + (B.y - A.y) / lenAB * length;

Ответ 2

Если у вас уже есть наклон, вы можете вычислить новую точку:

x = old_x + length * cos(alpha);
y = old_y + length * sin(alpha);

Я не делал этого через некоторое время, поэтому возьмите его с солью.

Ответ 3

Я просто наткнулся на это после поиска этого сам и предоставил вам готовое решение, вы можете взглянуть на код внутри стандартного класса Vector (на любом языке) и выбрать вишню, части, которые вам нужны, но в итоге я использовал один, и код выглядит следующим образом:

vector.set(x,y);
vector.normalize();
vector.multiply(10000);// scale it by the amount that you want

Удачи!