思路:
三角形内任意一点与三角形三个顶点连线可构成最多三个三角形且和为总面积,因此若点在三角形内则符合要求,在求解的时候可以利用向量叉乘后的模的一半求解;
class Dot:
def __init__(self,x,y):
self.x=float(x)
self.y=float(y)
def solve_dot_is_in_triangle(dot_q,triangle):
if dot_q is None or triangle is None or len(triangle)<3 :
return
p1=triangle[0]
x1=p1.x
y1=p1.y
p2=triangle[1]
x2=p2.x
y2=p2.y
p3=triangle[2]
x3=p3.x
y3=p3.y
x=dot_q.x
y=dot_q.y
s0=0.5*abs((x2-x1)*(y3-y1)-(y2-y1)*(x3-x1)) # 使用向量积求解三角形面积
s1=0.5*abs((x1-x)*(y2-y)-(y1-y)*(x2-x))
s2=0.5*abs((x1-x)*(y3-y)-(y1-y)*(x3-x))
s3=0.5*abs((x2-x)*(y3-y)-(y2-y)*(x3-x))
sum=s1+s2+s3
print('sum=',sum)
print('s0=',s0)
if sum<=s0:
print('在三角形内')
else:
print('不再三角形内')
#测试
if __name__ == "__main__":
p0=Dot(1,2)
p1=Dot(0,0)
p2=Dot(2,2)
p3=Dot(4,0)
triangle = [p1,p2,p3]
solve_dot_is_in_triangle(p0,triangle)