Расширить отрезок линии на определенное расстояние - PullRequest
23 голосов
/ 12 октября 2011

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

Ответы [ 3 ]

48 голосов
/ 12 октября 2011

Вы можете сделать это, найдя единичный вектор вашего отрезка и масштабировать его до желаемой длины, а затем перевести конечную точку отрезка с этим вектором. Предположим, что ваши конечные точки сегмента линии 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;
9 голосов
/ 12 октября 2011

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

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

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

3 голосов
/ 05 января 2016

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

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

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...