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

判断一个点是否在三角形内算法 1 通过面积法判断点 P 是否在三角形 ABC 内 如果 P 点在三角形内 则 Sabc Sapc Sapb Spbc S 代表面积 Sabc 向量 AB 向量 AC 2 面积公式 代表叉乘 除以 2 是得到三角形面积 否则得到四边形面积

大家好,我是讯享网,很高兴认识大家。


讯享网

 

 

算法1:通过面积法判断点P是否在三角形ABC内,如果P点在三角形内,则Sabc = Sapc + Sapb + Spbc(S代表面积)

Sabc = 向量AB ^ 向量AC / 2;//面积公式   ^ 代表叉乘    除以2 是得到三角形面积,否则得到四边形面积

unity中代码:

 Vector3 a = new Vector3(0, 0); Vector3 b = new Vector3(4, 0); Vector3 c = new Vector3(0, -5); Vector3 p = new Vector3(1, -3.7501f); Vector3 pa = p - a; Vector3 pb = p - b; Vector3 pc = p - c; Vector3 t1 = Vector3.Cross(pa, pb); Vector3 t2 = Vector3.Cross(pb, pc); Vector3 t3 = Vector3.Cross(pc, pa); float sumMianJi = Vector3.Cross(a - b, a - c).magnitude * 0.5f; float mianji1 = t1.magnitude * 0.5f; float mianji2 = t2.magnitude * 0.5f; float mianji3 = t3.magnitude * 0.5f; //这里可设置阈值,在多少范围内算相等 if (Mathf.Approximately(sumMianJi, (mianji1 + mianji2 + mianji3))) { Debug.Log("在三角形内"); } else { Debug.Log("不在三角形内"); }

讯享网

 

 

 

 

 

算法2:若P点在ABC内部,则∠apc,∠bpc,∠bpa都是小于180度的,或者同时大于180度,用此原理则可以计算出p点是否在三角形内,

unity内代码:

讯享网 Vector3 a = new Vector3(0, 0); Vector3 b = new Vector3(4, 0); Vector3 c = new Vector3(0, -5); Vector3 p = new Vector3(1, -3.7501f); Vector3 pa = p - a; Vector3 pb = p - b; Vector3 pc = p - c; Vector3 t1 = Vector3.Cross(pa, pb); Vector3 t2 = Vector3.Cross(pb, pc); Vector3 t3 = Vector3.Cross(pc, pa); bool isIn2 = t1.z >= 0 && t2.z >= 0 && t3.z >= 0 || t1.z <= 0 && t2.z <= 0 && t3.z <= 0; Debug.Log("isIn:" + isIn2); Debug.Log("t1:" + t1 + " t2:" + t2 + " t3:" + t3);

参考链接:https://www.cnblogs.com/TenosDoIt/p/4024413.html

小讯
上一篇 2025-01-27 15:43
下一篇 2025-01-19 23:33

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/57321.html