线和线段交叉点

bit*_*oon 7 math geometry intersection line

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

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

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

Eug*_*ith 6

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

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

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


And*_*rew 6

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

第 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 < 1,交点位于 (p1, p2)

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