C# XNA线段交点?
假设我们有4个向量2(是的,这是2d),所以我们有lineOneStart、lineOneEnd、lineTwoStart和lineTwoEnd 如何检测这两条线是否相交?我不在乎它们在哪里交叉,我只想知道它们是否相交。检查这个公式 我最近也不得不解决这个问题。另一个选项是使用(获取)直线方程(C# XNA线段交点?,c#,math,xna,C#,Math,Xna,假设我们有4个向量2(是的,这是2d),所以我们有lineOneStart、lineOneEnd、lineTwoStart和lineTwoEnd 如何检测这两条线是否相交?我不在乎它们在哪里交叉,我只想知道它们是否相交。检查这个公式 我最近也不得不解决这个问题。另一个选项是使用(获取)直线方程(y=mx+c),但您需要关注几个边缘情况,以及实际检查交点是否在线段内。上面链接中的公式是有效的,虽然我不能真正评论公式是如何重新排列的,但我要说的是它是有效的;) 编辑: 正如AndiDog提到的,我使
y=mx+c
),但您需要关注几个边缘情况,以及实际检查交点是否在线段内。上面链接中的公式是有效的,虽然我不能真正评论公式是如何重新排列的,但我要说的是它是有效的;)
编辑:
正如AndiDog提到的,我使用的另一个站点(这个例子也很好)是这个。因为这是XNA,第二条线路就在你的街道上
编辑(断开链接的内容):
这些线的方程是Pa=P1+ua(P2-P1)
和Pb=P3+ub(P4-P3)
求解Pa=Pb
的点,给出两个未知量(ua和ub)下的两个方程
x1+ua(x2-x1)=x3+ub(x4-x3)
及
y1+ua(y2-y1)=y3+ub(y4-y3)
求解给出了ua和ub的以下表达式
将其中任何一条代入相应的方程式,即可得到交点。例如,交点(x,y)为
x=x1+ua(x2-x1)
y=y1+ua(y2-y1)
注:
ua和ub方程的分母相同。
如果ua和ub方程的分母为0,则两条线平行。
如果ua和ub方程的分母和分子为0,则两条线重合。
方程适用于直线,如果需要线段的交点,则只需测试ua和ub是否介于0和1之间。无论哪一个位于该范围内,则相应的线段包含交点。如果两者都在0到1的范围内,则交点在两条直线段内。关于该主题(直线段相交)有一个主题。为了完整性,当直线在
(a,b,c)
坐标中表示时,我将在算法下方包括该直线的方程a*x+b*y+c=0
- 坐标为
和(a1,b1,c1)
的两条线在一个点(a2,b2,c2)
(x,y)
- 找到点的齐次坐标,如下所示:
u = b1*c2-b2*c1; v = a2*c1-a1*c2; w = a1*b2-a2*b1;
- 如果线是平行的,则
w=0
- 否则,交点位于
x = u/w; y = v/w;
- 要通过两个点定义一行
(x1,y1)和(a,b,c)
,请使用(x2,y2)
a= y1-y2; b= x2-x1; c= x1*y2-y1*x2;
- 通过极性方向
(cos(θ),sin(θ))的点
定义线(x,y)
(a,b,c)
a= -sin(θ);
b= cos(θ);
c= x*sin(θ)-y*cos(θ);