如何阻止一个线段与另一个线段相交?

时间:2012-04-14 20:05:52

标签: java math geometry 2d

几何代码在一段时间后变得令人厌烦,但我想完成这个库,所以这里就是。

基本上,移动一个线段A的最有效方法是什么,以便它不再与另一个线段相交,B?

两个线段都定义了一个起点(x,y)和一个向量,描述了段从该点(eX,eY)的延伸方式。以下是如何描述线段的示例:

enter image description here

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

enter image description here

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

编辑:人们通过“移动”问我的意思 - 我的意思是改变线段起点的(x,y)坐标。这将翻译整个细分市场。

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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)

这样,你将起点移开,直到你找到的交叉点为两条线的触点。