三角形与射线相交

本文探讨了平面三角形与平面上的点之间的关系,通过一个神奇的公式来解出点与三角形边的比例。进一步将此公式延伸到三维空间,研究三角形与射线的相交情况,包括无解、唯一解和多解的条件,并提供了解方程的方法。在实际应用中,需要注意计算的t值并不直接表示距离。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.神奇的公式

有平面三角形点v0,v1,v2。p为该平面上的点则有

其中u为三角形一边的比例,v为三角形另一边的比例,

v0 + (v1 - v0) * u + (v2 - v0) * v  =  p

根据方程解u v。之前有一个疑问,为什么一条公式可以解两个未知数?

其实这是两条方程,平面向量有x y两个方向,这就可以解。

方程的解有三类,有多解 无解 唯一解。

当三角形为一条线,p在线上,则有无数解,p在线外则无解 否则有唯一解。

如果p在三角形内则有解出来的u>=0 v>=0 (u+v)<=1

二.公式延伸

想到上面的计算,我想空间上也一样可以运用此公式

如果在三维空间上的三角形点v0,v1,v2,与射线R(R为单位向量),O为射线起点有

t为射线到三角形交点的距离

v0 + (v1 - v0) * u + (v2 - v0) * v = R * t + O

(v0 - O) + (v1 - v0) * u + (v2 - v0) * v = R * t

简化名称  令 P = v0 - O

有 P + (v1 - v0) * u + (v2 - v0) * v = R * t

解方程,就可以得到 u v t 但在空间上 方程也未必一定有解

1判断是否存在v0 v1 v2是一条线的情况

是的话,情况变得复杂,这里不去细化

2.判断三角形是不是跟射线的方向平行

如果平行则无解 重叠则有无数解

三.解方程

P.x + M.x * u + N.x * v = R.x * t

P.y + M.y * u + N.y * v = R.y * t

P.z + M.z * u + N.z * v = R.z * t

①②消去t得到④<

破片射线三角形面元相交算法中,存在一种直接判断的方法,即Möller–Trumbore算法(M-T算法)[1][2。M-T算法通过射线三角形相交检测来确定破片射线是否三角形面元相交。这个算法利用了射线平面的相交检测以及射线三角形相交检测。 具体来说,M-T算法使用了克莱姆法则和三矢量的混合积来判断射线三角形相交情况。通过计算射线三角形相交点,可以确定是否存在相交。该算法相比传统的解方法更直接、更快速,并且适用于各种场景。 因此,使用Möller–Trumbore算法可以有效地判断破片射线三角形面元是否相交。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【收藏好文】一文读懂射线三角形相交算法Moller-Trumbore算法](https://blog.youkuaiyun.com/oakchina/article/details/124385464)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [空间射线三角形相交算法的两种实现](https://blog.youkuaiyun.com/charlee44/article/details/104348131)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值