判断点在直线的哪侧

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

 

posted @ 2019-04-12 14:06  小新新的蜡笔  阅读(1077)  评论(0编辑  收藏  举报