Я пытаюсь найти способ расширить сегмент линии на определенное расстояние. Например, если у меня есть сегмент линии, начинающийся с 10,10, до 20,13, и я хочу увеличить длину на 3, как я могу вычислить новую конечную точку. Я могу получить длину sqrt (a ^ 2 + b ^ 2) в этом примере 10.44, так что, если бы я хотел узнать новую конечную точку с 10,10 с длиной 13,44, что было бы вычислительно самым быстрым способом? Я также знаю склон, но не знаю, поможет ли это мне в этом случае.
Расширьте сегмент линии на определенное расстояние
Ответ 1
Вы можете сделать это, найдя единичный вектор вашего сегмента линии и масштабируя его до нужной длины, а затем переведя конечную точку вашего сегмента линии с помощью этого вектора. Предположим, что конечные точки вашего сегмента линии A
и B
и вы хотите продлить после конечной точки B
(и lenAB
- длина сегмента строки).
#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
Удачи!