欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

最简理解空间射线与平面交点

发布时间:2023/12/2 编程问答 55 豆豆
生活随笔 收集整理的这篇文章主要介绍了 最简理解空间射线与平面交点 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

工作时正好碰到了这个老生常谈的问题,但百度出来都看起来复杂,不易于理解。
其实是很简单的问题,这里重新推导,并记录一下公式。

核心:

几何意义,使用dot,避免空间平面,直线方程。

已知:

平面一点c,平面法线N,射线起点o,射线方向dir。

推导:

设交点为o+k*dir
因为法线与平面上向量垂直
N·(o+k*dir-c)=0
为简化记T=o-c
则k=-(T·N)/(dir·N)

这里还有个除0问题。也就是射线方向完全与法线平行:要么射线本身就在平面上,我们认为相交距离为0;不在平面上,就认为是负无穷(我用正负判定是否相交)

代码:

//https://blog.csdn.net/qq_41524721/article/details/103490144 float RayCastPlane(float3 rayPos, float3 rayDir, float3 planeP, float3 planeN) {float dd = dot(rayDir, planeN);if (NearZero(dd)){//dir is perpendicular to normalif (NearZero(dot(rayPos - planeP, planeN))){//rayPos is in plane,consider ray dis is 0return 0;}else{//not cast,infinite intersectionreturn -12345;//当作负无穷}}return -dot(rayPos - planeP, planeN) / dd; }

总结

以上是生活随笔为你收集整理的最简理解空间射线与平面交点的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。