判断点是否在三角形内(叉积)

————————————————点是否在三角形内——————————
如果点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)))


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值