首页 / 知识
关于数学:3D中的点三角形碰撞检测
2023-04-17 13:39:00

Point-Triangle Collision Detection in 3D如何在以下物理模拟中纠正浮点错误:
我正在使用这种方法进行碰撞检测:
我遇到的问题是,有时该点落入浮点数学运算的灰色区域,该区域与BC线非常接近,以致于无法与任何一个三角形发生碰撞,即使从技术上讲它应始终与另一个发生碰撞,因为他们有优势。当发生这种情况时,该点就在两个边缘共享三角形之间通过。我用(!)标记了代码的一行,因为我认为那是我应该进行更改的地方。 在非常有限的情况下起作用的一种想法是跳过边缘测试。有效地将三角形变成平面。这仅在我的网格为凸包时有效,但我计划创建凸形状。 我在所有前后测试中都特别使用了点积和三角形法线。 当对具有边缘和顶点的某些几何形状拍摄单个光线时,这是一个不可避免的问题。令人惊讶的是,物理模拟似乎能找出最小的数值误差! 其他答复者提出的某些解释和解决方案将不起作用。尤其是:
以下是一些真正的解决方案:
让我强烈推荐Christer Ericson所著的《实时碰撞检测》。在第446–448页上讨论了此确切问题,并在第184–188页上说明了将光线与三角形相交的标量三乘积方法。 听起来您不包括测试它是否在边缘上(您正在编写"内部三角形边缘")。尝试将代码更改为"小于或等于"(内部或重叠)。 我发现您的射线不太可能完全以浮点精度生效的方式落在三角形之间。您绝对肯定这确实是问题吗? 无论如何,一种可能的解决方案是代替仅拍摄一束光线来拍摄三束非常接近的光线。如果一个恰好落在该至少一个之间,则其他两个中的至少一个可以保证落在三角形上。 这将至少允许您测试问题是否确实是浮点错误或更可能的问题。 如果要进行距离测量,请注意平方根。他们有一个讨厌的习惯,就是丢掉一半的精度。如果将这些计算中的一些叠加起来,就会很快遇到大麻烦。这是我使用的距离函数。
由于最后一个运算不是平方根,因此您不会再失去精度。 我在我正在从事的项目中发现了这一点。在研究了它并弄清楚它是做什么之后,我找到了我认为应该向他表示祝贺的程序员,但是他不知道我在说什么。 @声明:我的代码中确实已经使用了"大于或等于"的比较,谢谢您的建议。 +1 我当前的解决方案是在边缘测试中添加少量微调。基本上,在测试每个三角形时,都会将其边缘推出一小部分以抵消浮点误差。有点像测试浮点计算的结果是否小于0.01,而不是测试是否等于零。 这是一个合理的解决方案吗? |
最新内容
相关内容
linux命令错误的是?
linux命令错误的是?,系统,信息,异常,密码,工具,地址,网络,实时,状态,数据,Linux系统中输入命令,输出结果有误是怎么回事?出现以上提示,很多原因linux显示错误命令?
linux显示错误命令?,信息,系统,电脑,状态,时间,环境,命令,搜狐,密码,异常,虚拟机里怎么开始linux系统,打startx命令提示错误1、第一种:这个问题linux退出错误命令的?
linux退出错误命令的?,系统,电脑,环境,命令,位置,管理,工具,设备,终端,进程,Linux命令格式错误出现大于号怎么退出1、ctrl+c,终止当前运行命令linux没有该命令错误?
linux没有该命令错误?,系统,第一,环境,命令,分析,软件,异常,文件,目录,空格,不知道为什么在linux命令行下输入一些命令怎么都显示没有找到?1、linux命令错误代码?
linux命令错误代码?,系统,密码,电脑,网络,手机,网址,软件,代码,设备,老板,Linux管理常见错误1、检查权限:使用文件浏览器和终端,检查文件的访问linux3des命令?
linux3des命令?,软件,服务,平台,密码,工具,网络,名字,数据,图片,产品,Windows下连接Linux的ssh工具有哪些1、putty putty是最有名的SSH和telnelinux命令忽略错误?
linux命令忽略错误?,系统,地址,工作,信息,设备,命令,设计,灵活,观察,标准,linux命令问题,在使用ls命令时,能不能不让输出错误信息--pid=进程号linux命令3d性能?
linux命令3d性能?,系统,工具,实时,百分比,信息,分析,软件,情况,网站,建设,Linux常用性能诊断命令详解1、第二行信息依次为:进程总数、运行中的17个新手常见Python运行时错误
17个新手常见Python运行时错误,代码,错误,培训,变量,函数,局部,操作,定义,列表,实际,当初学Python时,想要弄懂Python的错误信息的含义可能有点Python导入错误分析
Python导入错误分析,代码,情况,分析,名字,标准,位置,培训,模块,路径,错误,当遇到无法导入某个python模块时,可能会是没有安装某个模块,也有可能如何查找python中的错误
如何查找python中的错误,代码,地方,信息,底部,位置,分析,观察,测试,工作,网络,1、先不要碰你的代码阅读代码,你甚至可能会想到该阅读哪些部分python的错误和异常
python的错误和异常,异常,代码,地方,标准,官网,状态,第三,第一,时间,培训,python至少有2类不同的错误:语法错误(SyntaxErrors)和异常(Exceptio