点与线共线时的一些讨论

发布时间 2023-11-28 23:33:34作者: yanghui01

1) 在两侧

2) 与端点重合

3) 在端点之间

 

判断共线

1) 用pa和pb判断

图1:pa和pb为0度,pa•pb=|pa|*|pb|*cos(0)=|pa|*|pb|; pa×pb=|pa|*|pb|*sin(0)=0

图2:p和端点重合,pa•pb=pa.x*pb.x+pa.y*pb.y=0; pa×pb=pa.x*pb.y-pa.y*pb.x=0

图3:pa和pb为180度,pa•pb=|pa|*|pb|*cos(180)=-|pa|*|pb|; pa×pb=|pa|*|pb|*sin(180)=0

所以,用叉乘只要判断是否为0,点乘要区分各种情况

 

2) 用ap和ab判断

图1情况1:ap和ab为180度(p靠近a点),ap•ab=|ap|*|ab|*cos(180)=-|pa|*|pb|; ap×ab=|ap|*|ab|*sin(180)=0

图1情况2:bp和ba为180度(p靠近b点),bp•ba=|bp|*|ba|*cos(180)=-|pa|*|pb|; bp×ba=|bp|*|ba|*sin(180)=0

图2:p和端点重合,ap•ab=ap.x*ab.x+ap.y*ab.y=0; ap×ab=ap.x*ab.y-ap.y*ab.x=0

图3:ap和ab为0度,ap•ab=|ap|*|ab|*cos(0)=|pa|*|pb|; ap×ab=|ap|*|ab|*sin(0)=0

所以,用叉乘只要判断是否为0,点乘要区分各种情况

 

共线时,判断p在线段两侧还是中间

叉乘无法区分锐角和钝角的区别,所以只能用点乘判断

1) 用pa和pb判断

图1:pa,pb为0度,pa•pb=|pa|*|pb|*cos(0)=|pa|*|pb|

图2:p和端点重合,pa•pb=pa.x*pb.x+pa.y*pb.y=0

图3:pa和pb为180度,pa•pb=|pa|*|pb|*cos(180)=-|pa|*|pb|

所以,点乘>0在两侧,=0重合,<0在中间;在两侧时,无法区分p靠近a点还是b点

 

2) 用ap和ab判断

图1情况1:ap和ab为180度(p靠近a点),ap•ab=|ap|*|ab|*cos(180)=-|pa|*|pb|

图1情况2:bp和ba为180度(p靠近b点),bp•ba=|bp|*|ba|*cos(180)=-|pa|*|pb|

图2:p和端点重合,ap•ab=ap.x*ab.x+ap.y*ab.y=0

图3:ap和ab为0度,ap•ab=|ap|*|ab|*cos(0)=|pa|*|pb|

所以,ap•ab<0时,在两侧(p靠近a点);bp•ba<0时,在两侧(p靠近b点);ap•ab=0时,重合;否则就是在中间