如果t1 * t2 > 0,则在同侧,否则在异侧。
点到直线的距离 点P到直线AB的距离:
d(P,AB) = |(P - A) x (B - A)| / | B - A|
P
A
B
计算几何
二、计算几何的基本算法 5、判断两条线段P1P2 ,P3P4是否相交
方法1:只要在4的基础上,加上一个判断,看交点是否在线段P1P2 ,P3P4上,即: function judgejiao(var p1,p2,p3,p4):Boolean; var p:pointtype; begin getjiao(p1,p2,p3,p4,p); {求交点} if min(p1.x,p2.x)<=p.x<=max(p1.x,p2.x) and min(p1.y,p2.y)<=p.y<=max(p1.y,p2.y) and min(p3.x,p4.x)<=p.x<=max(p3.x,p4.x) and min(p3.y,p4.y)<=p.y<=max(p3.y,p4.y) then jiao:=true {判断在线段内} else jiao:=false; end; 问题是:运用了除法,使得效率很低,并且容易产生误差,当线段几乎平行时,该算法对实际 计算机除法运算的精确度非常敏感。所以,希望在这种题目中只用加、减、乘、比较运算,不 要用除法,也不要用三角函数。
( p1 p0 ) ( p2 p0 ) ( x1 x0 )( y2 y0 ) ( x2 x0 )( y1 y0 )
如果该叉积为正, 则 P 0 P1 在 P 0 P 2 的顺时针方向, 如果为负,则 P 0 P1 在 P 0 P 2 的逆时针方向。 如果等于0,则P0,P1,P2三点共线。