判断点在直线的哪侧
1、判断点在直线的某侧
设矢量P(x1,y1),Q(x2,y2),则P叉乘Q表示以这两个矢量为相邻边构成的平行四边形的面积。
即(x1y2-x2y1)。
若x1y2-x2y1>0:表示Q在P的逆时针方向;
若x1y2-x2y1<0:表示Q在P的顺时针方向;
若x1y2-x2y1=0:表示Q与P共线,但可能同向也可能反向。
2、判断P是否在ΔABC内
1 def g(A,B,P): 2 """ 3 判断AP矢量在AB矢量的顺时针还是逆时针方向, 4 若在逆时针方向则返回1,共线返回0,在顺时针方向返回-1 5 :param A: 6 :param B: 7 :param P: 8 :return: 1或0或-1 9 """ 10 #使用PxQ=XpYq-XqYp,若大于0则表示Q在P的逆时针方向 11 result = (P[1]-A[1])*(B[0]-A[0])-(B[1]-A[1])*(P[0]-A[0]) 12 if result<0: 13 return -1 14 elif result==0: 15 return 0 16 else: 17 return 1 18 19 20 def isInTriangle(Pi,Pj,Pk,P): 21 """ 22 判断点P是否在其他三个点组成的三角形中,是的话返回true 23 :param P: 24 :param Pi: 25 :param Pj: 26 :param Pk: 27 :return: 28 """ 29 if g(Pi,Pj,Pk)==0: 30 return 0 31 if g(Pi,Pj,P)*g(Pi,Pj,Pk)>=0 and g(Pj,Pk,P)*g(Pj,Pk,Pi)>=0 and 32 g(Pk,Pi,P)*g(Pk,Pi,Pj)>=0: 33 return 1 34 return 0