将线段延伸特定距离

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

您可以通过查找线段的单位矢量并将其缩放到所需长度,然后使用此矢量平移线段的终点来实现。 假设您的线段端点是AB并且您希望在端点B之后延伸(并且lenAB是线段的长度)。

 #include  // Needed for pow and sqrt. struct Point { double x; double y; } ... struct Point A, B, C; double lenAB; ... lenAB = sqrt(pow(Ax - Bx, 2.0) + pow(Ay - By, 2.0)); Cx = Bx + (Bx - Ax) / lenAB * length; Cy = By + (By - Ay) / lenAB * length; 

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

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

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

在我自己搜索之后,我偶然发现了这个问题,为了给你一个开箱即用的解决方案,你可以看一下标准Vector类(用任何语言)里面的代码,然后挑选你需要的部分,但我最终使用了一个,代码看起来像这样:

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

祝好运 !