线和线段交叉点

时间:2010-10-27 06:35:17

标签: math geometry line intersection

如何检测直线(方向d和-d从点p)和线段(点p1和p2之间)是否在2D中相交?如果他们这样做,我怎样才能得到他们的交叉点。

有很多例子可以检测两个线段是否相交,但这应该更简单。

我发现了这个,但我不明白什么是副操作员: http://www.loria.fr/~lazard//ARC-Visi3D/Pant-project/files/Line_Segment_Line.html

3 个答案:

答案 0 :(得分:6)

如果这是一个2D任务(线和线段位于同一平面,并且它们由二维坐标指定),则很容易。

构造一个与d(行的方向)垂直的向量,称为n。

计算点积n。(p1-p)和n。(p2-p)。如果它们具有相同的符号,则没有交叉点。如果它们有相反的符号,则有一个交叉点。通过一些思考,您可以找出如何根据p,p1-p和p2-p计算交点的位置。

答案 1 :(得分:4)

您可以简单地检查两条线(您的线和线段线)是否相交并评估交点。

第1行:(x,y)(t)= p + t * d; 第2行:(x,y)(t)= p1 + k *(p2-p1)

在交叉点: p + t * d = p1 + k *(p2 - p1) - 两个方程式(每x和每y)

从这些方程式中,您可以简单地找到k和t参数。如果0 < k&lt; 1交点位于(p1,p2)

如果你知道k或t,你可以简单地计算(x,y)(t)= p + t * d的交点或 (x,y)(t)= p1 + k *(p2-p1)

答案 2 :(得分:0)

p(x,y)a方向的线方程为D = a.x+b 其中b = y - a.x

p1(x1,y1)p2(x2,y2)D' = a'.x+b'中任何x的等式为[x1;x2]的段 其中a' = (y2-y1)/(x2-x1)b' = y2 - a'.x2 = y1 - a'.x1

如果x [x1;x2]之间D = D'X = (b'-b)/(a-a'),则会有一个交叉点 因此如果[x1;x2]属于Y = a.X+b = a'.X+b 然后P(X,Y)为您提供交叉点p(255,255)

例如:

a = 1b = 0 =&GT; p1(60,179)

p2(168,54)a' = -125/108

=&GT; b' = 24596/99

=&GT; X = (24596/99 - 0)/(1+125/108) = 115,1587983

=&GT; Y = (24596/99 - 0)/(1+125/108) = 115,1587983

=&GT; X

P(X,Y)介于60和168之间,因此{{1}}

处有一个交叉点