我正在尝试找到一种方法,以特定距离扩展线段。例如,如果我有一个起点为10,10,终点为20,13的线段,并且我想将长度延长3个单位,我该如何计算新的终点坐标呢?在这个例子中,我可以通过sqrt(a^2 +b^2)来得到长度为10.44。如果我想知道从起始点10,10开始,长度为13.44的新终点坐标,最快的计算方法是什么? 我也知道斜率,但不确定在这种情况下它是否有所帮助。
我正在尝试找到一种方法,以特定距离扩展线段。例如,如果我有一个起点为10,10,终点为20,13的线段,并且我想将长度延长3个单位,我该如何计算新的终点坐标呢?在这个例子中,我可以通过sqrt(a^2 +b^2)来得到长度为10.44。如果我想知道从起始点10,10开始,长度为13.44的新终点坐标,最快的计算方法是什么? 我也知道斜率,但不确定在这种情况下它是否有所帮助。
你可以通过找到线段的单位向量并将其缩放到所需长度,然后使用该向量来平移线段的端点来完成。假设您的线段端点为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;
如果您已经有斜率,您可以计算出新的点:
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
祝你好运!