当前位置: 首页 > news >正文

Unity 中计算射线和平面相交距离的原理

有此方法
在这里插入图片描述
能够计算射线和平面是否相交以及射线起点到平面交点的距离

代码分析

var dot = Vector3.Dot(ray.direction, plane.normal);

计算射线和平面法线的点积,如果大于等于0,则说明射线和平面没有相交,否则,说明射线和平面相交
在这里插入图片描述

distance = -(Vector3.Dot(ray.origin, plane.normal) + plane.distance) / dot;

对于一个平面,它的标准方程是Ax + By + Cz + D = 0,其中(A, B, C)是平面法向量,D是平面到原点的距离,这里的xyz的意思是,当你有一个点 (x,y,z) 时,你可以将这个点的坐标代入平面方程 Ax+By+Cz+D=0 中。如果等式成立(即结果为0),则该点位于平面上;如果不成立(即结果不为0),则该点不在平面上。
根据上面的说法,射线和平面相交的这个点代入这个公式,如果等于0,就说明这个点在平面上,即我们需要的这个交点
射线的参数方程可以表示为:
P = origin + t ⋅ direction
其中,P 是射线上的任意一点,origin 是射线的起点,direction 是射线的方向向量,t 是一个参数,它表示从起点到点 P 的距离(但注意这里的距离是沿着射线方向的,所以实际上是一个标量倍数,用于缩放方向向量)
将点P代入平面方程
A(origin.x+t⋅direction.x)+B(origin.y+t⋅direction.y)+C(origin.z+t⋅direction.z)+D=0
这里,origin.x,origin.y,origin.z 是射线起点的坐标,direction.x,direction.y,direction.z 是射线方向向量的分量
那么
t = -(A * origin.x + B * origin.y + C * origin.z + D) / (A * direction.x + B * direction.y + C * direction.z)
前面一部分就是射线的起点和平面法向量的点积 + 平面和原点的距离,后面一部分就是射线方向和平面法向量的点积

http://www.lryc.cn/news/516112.html

相关文章:

  • 浅谈棋牌游戏开发流程七:反外挂与安全体系——守护游戏公平与玩家体验
  • 《无力逃脱》V1.0.15.920(59069)官方中文版
  • 六种主流服务器的选择与使用
  • TiDB 升级至高版本提示'mysql.tidb_runaway_watch' doesn't exist 问题处理
  • GRU-PFG:利用图神经网络从股票因子中提取股票间相关性
  • 数字化供应链创新解决方案在零售行业的应用研究——以开源AI智能名片S2B2C商城小程序为例
  • 安卓Activity执行finish后onNewIntent也执行了
  • 数据结构.期末复习.学习笔记(c语言)
  • Kafaka安装与启动教程
  • 根据docker file 编译镜像
  • 联邦学习的 AI 大模型微调中,加性、选择性、重参数化和混合微调
  • android 外挂modem模块实现Telephony相关功能(上网,发短信,打电话)
  • 【计算机视觉技术 - 人脸生成】2.GAN网络的构建和训练
  • 数据中台与数据治理服务方案[50页PPT]
  • 【Qt】将控件均匀分布到圆环上
  • 第四、五章补充:线代本质合集(B站:小崔说数)
  • 2025年贵州省职业院校技能大赛信息安全管理与评估赛项规程
  • 松鼠状态机流转-@Transit
  • 微信小程序调用 WebAssembly 烹饪指南
  • # LeetCode Problem 2038: 如果相邻两个颜色均相同则删除当前颜色 (Winner of the Game)
  • Redis面试相关
  • 4.CSS文本属性
  • Mongo高可用架构解决方案
  • Rabbitmq 业务异常与未手动确认场景及解决方案
  • linux,centos7.6安装禅道
  • java基础之代理
  • 计算机网络——期末复习(6)期末考试样例2(含答案)
  • JavaScript 获取DOM对象
  • 一文讲明白朴素贝叶斯算法及其计算公式(入门普及)
  • 实际开发中,常见pdf|word|excel等文件的预览和下载