如何防止一条线段与另一条线段相交?

3
几何编码有些枯燥,但我想完成这个库,所以让我们开始吧。
基本上,最有效的方法是移动一条线段A,使其不再与另一条线段B相交?
两个线段都由起始点(x,y)和描述该线段如何从该点延伸的向量(eX,eY)定义。下面是线段描述的示例:
解决方案是将线段移动到最近的位置,以便它不相交,而不修改其范围。例如:
我要寻求的答案是什么?
编辑:人们问我“移动”是什么意思-我指的是更改线段起点的(x,y)坐标。这将转换整个线段。
并且线段存在于笛卡尔平面上,任何x / y运动都是允许的。

你可以朝哪些方向移动? - j13r
移动是什么意思?改变x,y但保持ex,ey不变吗?只要线段的长度保持不变,我可以改变x,y,ex,ey吗? - emory
2个回答

4

这样做怎么样:找到四个向量,其中两个来自红线端点沿着黑线垂直方向,另外两个是从红线垂直指向黑线端点。取这些向量中最短的一个,并沿着它移动红线。


0

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

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

让我们找出直线相交的点。这就是当a在[0,1]范围内时,a*(eX1,eY1)+(x1,y1)=(eX2,eY2)+(x2,y2)的地方。

如果存在这种相交,您可以将线移动到这个交点结束,并使a成为您需要移动的长度。

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

这样,您就将起点移开了,直到您之前发现的交点成为两条线的接触点。


这种方法的问题在于它不是最短的旅行距离。是的,它解决了碰撞问题,但是以一种非常不优化的方式。 - CodeBunny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接