点线关系判断

1、点在线的左边还是右边

设线段端点为从 A(x1, y1)到 B(x2, y2), 线外一点 P(x0,y0),
判断该点位于有向线 A→B 的那一侧。 
a = ( x2-x1, y2-y1) 
b = (x0-x1, y0-y1) 
a x b = | a | | b | sinφ (φ为两向量的夹角) 
| a | | b |  ≠ 0 时,  a x b  决定点 P的位置 
所以  a x b  的 z 方向大小决定 P位置 
(x2-x1)(y0-y1) – (y2-y1)(x0-x1)  >  0   左侧 
(x2-x1)(y0-y1) – (y2-y1)(x0-x1)  <  0   右侧 
(x2-x1)(y0-y1) – (y2-y1)(x0-x1)  =  0   线段上 

2、判断三点是顺时针还是逆时针

设 p1=(x1,y1),   p2=(x2,y2),   p3=(x3,y3) 
求向量  

   p12=(x2-x1,y2-y1)    

   p23=(x3-x2,y3-y2)  
   
则当 p12 与 p23 的叉乘(向量积)  
   
   p12   x   p23   =   (x2-x1)*(y3-y2)-(y2-y1)*(x3-x2)  
   
  为正时,p1-p2-p3   路径的走向为逆时针,  
  为负时,p1-p2-p3   走向为顺时针,  
  为零时,p1-p2-p3   所走的方向不变,亦即三点在一直线上。

你可能感兴趣的:(算法)