如何检测线段(方向d和点p的-d)和线段(点p1和点p2之间)是否在2D中相交?如果他们这样做,我怎么能得到他们的交点。线段和线段交点
有很多示例如何检测两条线段是否相交,但这应该更简单。
我发现了这一点,但我不明白什么是边运营商: http://www.loria.fr/~lazard//ARC-Visi3D/Pant-project/files/Line_Segment_Line.html
如何检测线段(方向d和点p的-d)和线段(点p1和点p2之间)是否在2D中相交?如果他们这样做,我怎么能得到他们的交点。线段和线段交点
有很多示例如何检测两条线段是否相交,但这应该更简单。
我发现了这一点,但我不明白什么是边运营商: http://www.loria.fr/~lazard//ARC-Visi3D/Pant-project/files/Line_Segment_Line.html
如果这是一个2D的任务(行和段位于同一平面,并且它们通过2维指定坐标),这很容易。
构造一个与d(线的方向)垂直的向量。计算点积d *(p1-p)和d *(p2-p)。如果它们具有相同的符号,则不存在相交。如果他们有相反的标志,就有一个交叉点。通过一点思考,你可以计算出如何用p,p1-p和p2-p来计算交点的位置。
为什么你需要构造一个与d正常的向量?你在后面的解释中似乎没有用... – 2017-07-05 09:18:03
我认为你在随后的点产品中称之为“d”实际上是正常方向。 – 2017-07-05 09:26:44
您可以简单地检查两条线(您的线和一条线段线)是否相交并评估相交点。第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 <ķ< 1交点是在(P1,P2)
如果知道K或T优可以简单地计算从(X,Y)的交叉点(T)= P + T * d或 (X,Y)(T)= P1 + K *(P2 - P1)
让p(x,y)
和a
其方向上的直线方程是D = a.x+b
其中b = y - a.x
让p1(x1,y1)
和p2(x2,y2)
一个段,其方程式为D' = a'.x+b'
对于中的任何 其中a' = (y2-y1)/(x2-x1)
和b' = y2 - a'.x2 = y1 - a'.x1
你有一个交叉点,如果有[x1;x2]
之间的x
为此D = D'
因此如果X = (b'-b)/(a-a')
属于[x1;x2]
然后Y = a.X+b = a'.X+b
给你交点P(X,Y)
例如:
let p(255,255)
a = 1
=>b = 0
让p1(60,179)
和p2(168,54)
=>a' = -125/108
=>b' = 24596/99
=>X = (24596/99 - 0)/(1+125/108) = 115,1587983
=>Y = (24596/99 - 0)/(1+125/108) = 115,1587983
X
是60和168之间,以便有一个相交离子点在P(X,Y)
请将您的表达式发布到行和段中,以便我们可以对齐答案。 TNX! – 2010-10-27 06:50:32
这是2D还是3D任务? – user434507 2010-10-27 07:28:13