————————————————点是否在三角形内——————————
如果点P在三角形ABC内,则三角形的面积可以分成PAB、PBC、PAC三个小的三角形,如果不在三角形内则无法让这三个三角形
与大的三角形的面积相同。
1.海伦公式法
S = sqrt(p*(p-a)(p-b)(p-c))
注:p为三角形ABC的周长的1/2,a, b, c, 分别为三角形的三条边长,S为三角形的面积
两点之间的距离公式为:|AB| = |=sqrt((x1-x2)(x1-x2)-(y1-y2)(y1-y2)),其中A(x1,y1),B(x2,y2).
2.集合项链法求解面积:
向量的集合意义就是得到的平行四边形的面积,而平行四边形的一半就是三角形的面积,通过这个原理可以知道求三角形面积的方法
S = (x2-x1)(y3-y2)-(x3-x2)(y2-y1),其中A(x1,y1),B(x2,y2),C(x3,y3).
class Point(object):
def __init__(self, x, y):
self.x = x
self.y = y
def cross_product(p1, p2, p3): #求叉积
return (p2.x - p1.x) * (p3.y - p1.y) - (p3.x - p1.x) * (p2.y - p1.y)
def is_in_triangle(A, B, C, D): #判别是否在三角形内
if cross_product(A, B, D) >= 0 and cross_product(B, C, D) >= 0 and cross_product(A, C, D) >= 0:
return True
else:
return False
if __name__ == '__main__':
A = Point(1, 3)
B = Point(3, 5)
C = Point(4, 5)
print(is_in_triangle(A, B, C, Point(2, 2)))
print(is_in_triangle(A, B, C, Point(3, 4.5)))