将线段延伸特定距离

goo*_*ulf 25 c algorithm geometry

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

sae*_*edn 50

您可以通过查找线段的单位矢量并将其缩放到所需长度,然后使用此矢量平移线段的终点来实现.假设您的线段端点是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;
Run Code Online (Sandbox Code Playgroud)

  • 其中lenAB = sqrt((Ax - Bx)**2 +(Ay - By)**2) (10认同)
  • 其中length是要添加到行中的额外长度 (3认同)
  • 万一你想知道它来自哪里,(Bx - Ax)/ lenAB*长度与cos(slope_alpha)*长度相同...对我有帮助 (2认同)

cni*_*tar 9

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

x = old_x + length * cos(alpha);
y = old_y + length * sin(alpha);
Run Code Online (Sandbox Code Playgroud)

我有一段时间没有这样做,所以拿一粒盐.

  • 其中alpha = atan2(y-old_y,x-old_x) (6认同)

小智 6

我自己搜索后偶然发现了这一点,为了给您一个开箱即用的解决方案,您可以查看标准 Vector 类(任何语言)中的代码,然后选择您需要的部分,但我最终使用了一个,代码如下所示:

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

祝你好运 !