C 将线段延伸特定距离

C 将线段延伸特定距离,c,algorithm,geometry,C,Algorithm,Geometry,我正试图找到一种方法,将线段延长一段特定的距离。例如,如果我有一条从10,10开始延伸到20,13的线段,并且我想将长度延伸3,那么如何计算新端点。在这个例子10.44中,我可以通过sqrt(a^2+b^2)得到长度,所以如果我想知道长度为13.44的10,10中的新端点,那么计算最快的方法是什么?我也知道坡度,但不知道这是否对我有帮助。如果你已经有了坡度,你可以计算新的点: x = old_x + length * cos(alpha); y = old_y + length * sin(al

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

如果你已经有了坡度,你可以计算新的点:

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

我已经有一段时间没有这样做了,所以请谨慎对待。

您可以通过找到线段的单位向量并将其缩放到所需的长度,然后用该向量平移线段的端点来完成此操作。假设您的线段端点是
A
B
,并且您希望在端点
B
之后延伸(而
lenAB
是线段的长度)

#包括//pow和sqrt所需。
结构点
{
双x;
双y;
}
...
结构点A、B、C;
双lenAB;
...
lenAB=sqrt(功率(A.x-B.x,2.0)+功率(A.y-B.y,2.0));
C.x=B.x+(B.x-A.x)/lenAB*长度;
C.y=B.y+(B.y-A.y)/lenAB*长度;

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

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

祝你好运

这不是一个编程问题,而是一个简单的数学问题,然后你必须将其扩展到你的代码中。@Constantinius这仍然是一个算法问题,只是一个基于数学的问题(计算机科学非常重视数学)。其中lenAB=sqrt((a.x-B.x)**2+(a.y-B.y)**2)这个解决方案似乎运行得最快。感谢您的帮助,以防您想知道这是从哪里来的,(B.x-A.x)/lenAB*长度与cos(slope_alpha)*长度相同…对我有帮助其中长度是要添加到线条的额外长度为什么有双星号?这是什么意思?其中alpha=atan2(y-old_y,x-old_x)感谢您的帮助,此解决方案似乎比较低的解决方案慢一点。我很感谢你的帮助,这也很有效。这对我来说不是很有效,新的点永远不会与两个给定的直线点平行。所以它不再是一条直线了。可能是我的错误,也许是双重检查我认为这是最优雅的答案
vector.set(x,y);
vector.normalize();
vector.multiply(10000);// scale it by the amount that you want