三角形与三角形碰撞检测

  记两个三角形分别为 T 1 , T 2 T_1,T_2 T1,T2,所在平面为 π 1 , π 2 \pi_1,\pi_2 π1,π2, T 1 T_1 T1的顶点为 V 0 1 , V 1 1 , V 2 1 V_0^1,V_1^1,V_2^1 V01,V11,V21, T 2 T_2 T2的顶点为 V 0 2 , V 1 2 , V 2 2 V_0^2,V_1^2,V_2^2 V02,V12,V22.

π 2 \pi_2 π2的表达式为:
在这里插入图片描述
其中
在这里插入图片描述
T 1 T_1 T1的每个点到 π 2 \pi_2 π2的有向距离为:
在这里插入图片描述

1.二者所在平面无交

  若有向距离 d V i 1 d_{V_i^1} dVi1均不为0,且有相同的符号,则三角形 T 1 T_1 T1位于平面 π 2 \pi_2 π2的一侧,故三角形 T 1 T_1 T1与平面 π 2 \pi_2 π2不相交,那么三角形 T 1 T_1 T1与三角形 T 2 T_2 T2不相交. 同理可通过检测三角形 T 2 T_2 T2是否位于平面 π 1 \pi_1 π1的一侧来判断两三角形是否相交.

2.二者在同一平面

  若有向距离 d V i 1 d_{V_i^1} dVi1均为0,那么两三角形位于同一个平面上,将这两个三角形投影至与坐标轴平形的平面,使得面积最大化,由此减少了一个维度,问题转换为检测二维的两个三角形是否相交,首先检测 T 1 T_1 T1的每条边是否与 T 2 T_2 T2的边相交,其次检测 T 1 T_1 T1是否完全包含于 T 2 T_2 T2,即检测 T 1 T_1 T1的每个顶点是否包含于 T 2 T_2 T2,同理检测 T 2 T_2 T2是否完全包含于 T 1 T_1 T1.

2.其它

  若不属于上述两种情况,那么平面 π 1 , π 2 \pi_1,\pi_2 π1,π2交于直线 L = O + t D L=O+tD L=O+tD,其中方向向量 D = N 1 × N 2 D=N_1 \times N_2 D=N1×N2, O O O是直线上一点,两个三角形分别与直线 L L L相交构成直线上的一段区间,若两段区间相交,那么两三角形相交,反之不相交,两种情况如下图所示:
在这里插入图片描述
  考虑三角形 T 1 T_1 T1与直线 L L L相交构成的区间,不妨设 V 0 1 , V 2 1 V_0^1,V_2^1 V01,V21位于 π 2 \pi_2 π2的一侧, V 1 1 V_1^1 V11位于另外一侧,边 V 0 1 V 1 1 ‾ \overline{V_0^1 V_1^1} V01V11与边 V 2 1 V 1 1 ‾ \overline{V_2^1 V_1^1} V21V11分别与 L L L相交,交点构成的区间即为所求.
在这里插入图片描述
各顶点在直线 L L L上的投影为:
在这里插入图片描述
B B B为边 V 0 1 V 1 1 ‾ \overline{V_0^1 V_1^1} V01V11 L L L的交点, B = O + t 1 D B=O+t_1 D B=O+t1D,记 K i 1 K_i^1 Ki1为各顶点在 π 2 \pi_2 π2的投影,由图中的两对相似三角形,得
在这里插入图片描述
注: d V i 1 d_{V_i^1} dVi1是有向距离,故 d V 0 1 − d V 1 1 d_{V_0^1}-d_{V_1^1} dV01dV11代表 ± ∣ d V 0 1 + d V 1 1 ∣ \pm |d_{V_0^1}+d_{V_1^1}| ±dV01+dV11
  同理可以计算边 V 2 1 V 1 1 ‾ \overline{V_2^1 V_1^1} V21V11 L L L的交点 O + t 2 D O+t_2 D O+t2D,由此记得三角形 T 1 T_1 T1与直线 L L L相交的区间,同理可得 T 2 T_2 T2与直线 L L L相交的区间, 最后判断两区间是否相交即可.

参考文献

Möller T. A fast triangle-triangle intersection test[J]. Journal of graphics tools, 1997, 2(2): 25-30.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值