3

几何代码一段时间后变得很累,但我想完成这个库,所以就到这里吧。

基本上,移动一条线段 A 使其不再与另一条线段 B 相交的最有效方法是什么?

两条线段均由起点 (x, y) 和描述线段如何从该点延伸的矢量 (eX, eY) 定义。下面是如何描述线段的示例:

在此处输入图像描述

我正在寻找的解决方案是将线段移动(其范围没有以任何方式修改)到它不相交的最近位置。一个例子:

在此处输入图像描述

获得此结果的最有效方法是什么?

编辑:人们问我所说的“移动”是什么意思——我的意思是改变线段起点的 (x, y) 坐标。这将翻译整个片段。

并且线段存在于笛卡尔平面上,并且允许任何x/y移动。

4

2 回答 2

4

怎么样:找到四个向量:两个从红线的端点垂直到黑线,两个从红线垂直到黑线的端点。取这些向量中最短的一个,沿着它移动红线。

于 2012-04-14T20:17:15.730 回答
0

由于您没有指定可以自由移动的维度,因此我假设任何维度都可以。

我假设您的红线的特征是起点(x,y)和从那里到终点的向量(eX,eY)。因此,线上的任何点都是 [0,1]*(eX,eY)+(x,y)。

让我们找到线交叉的点。这就是 a*(eX1,eY1)+(x1,y1) = (eX2,eY2)+(x2,y2),其中 a 在 [0,1] 中。

如果存在此交叉点,您可以移动线使其在此交叉点结束,其中 a 是您必须移动的长度。

(x1',y1') = (x1,y1) - a*(eX1,eY1)

这样,您将起点移开,直到您之前找到的交叉点是两条线的接触点。

于 2012-04-14T20:15:34.123 回答