求解点是否在三角形内

 思路:

    三角形内任意一点与三角形三个顶点连线可构成最多三个三角形且和为总面积,因此若点在三角形内则符合要求,在求解的时候可以利用向量叉乘后的模的一半求解;

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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值