首页 文章

线和线段交叉点

提问于
浏览
7

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

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

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

3 回答

  • 0

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

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

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

  • 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 <1,则交点处于(p1,p2)

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

  • 6

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

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

    如果 [x1;x2] 之间有一个 x D = D' 因此如果 X = (b'-b)/(a-a') 属于 [x1;x2] 那么 Y = a.X+b = a'.X+b 会给你一个交叉点 P(X,Y)

    例如 :

    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) 处有一个交叉点

相关问题