将线段延伸特定距离

时间:2011-10-12 13:03:42

标签: c algorithm geometry

我正在尝试找到一种将线段延长特定距离的方法。例如,如果我有一个从10,10开始延伸到20,13的线段,我想将长度延长3,我该如何计算新端点。在这个例子10.44中,我可以得到sqrt(a ^ 2 + b ^ 2)的长度,所以如果我想知道10,10的新端点,长度为13.44,那么计算上最快的方法是什么?我也知道坡度但不知道在这种情况下这对我有什么帮助。

3 个答案:

答案 0 :(得分:47)

您可以通过查找线段的单位矢量并将其缩放到所需长度,然后使用此矢量平移线段的终点来实现。假设您的线段终点为AB,并且您希望在终点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;

答案 1 :(得分:9)

如果您已经有斜率,则可以计算新点:

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

我有一段时间没有这样做,所以请耐心等待。

答案 2 :(得分:3)

我自己在搜索之后偶然发现了这个问题,并且为了给你一个开箱即用的解决方案,你可以看一下标准Vector类(用任何语言)里面的代码,然后选择什么您需要的部件,但我最终使用了一个,代码如下所示:

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