判断一个点是否在三角形内

判断一个点P是否在三角形ABC内,我们只需要分别求出cross(AB,AP),cross(BC,BP),cross(CA,CP)三个叉积方向是否一致。

代码如下:

     /// <summary>
    /// 是否在三角形内
    /// </summary>
    /// <returns></returns>
    static bool IsInTriangle(Vector3 A,Vector3 B,Vector3 C,Vector3 P)
    {
        Vector3 AB = B - A;
        Vector3 BC = C - B;
        Vector3 CA = A - C;
        Vector3 AP = P - A;
        Vector3 BP = P - B;
        Vector3 CP = P - C;

        return IsConvexAngle(AB, AP)== IsConvexAngle(BC, BP) && IsConvexAngle(BC, BP)== IsConvexAngle(CA, CP);
    }

    /// <summary>
    /// 是否是凸角
    /// </summary>
    /// <returns></returns>
    public static bool IsConvexAngle(Vector3 p1, Vector3 p2)
    {
        Vector3 p3 = new Vector3(p1.x, 0, p1.z);
        Vector3 p4 = new Vector3(p2.x, 0, p2.z);
        Vector3 crossVal = Vector3.Cross(p3, p4);
        return Vector3.Dot(Vector3.up, crossVal) >= 0;
    }

unity是左手坐标系。所以叉乘要使用左手。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值