射线与三角形求交的计算
来源:互联网 发布:99什么意思网络用语 编辑:程序博客网 时间:2024/04/29 21:57
将射线定义为一个基点和向量,那么射线上的任意点可以表示为P = P0 + tV,其中P0为基点,V为向量,t满足 t>=0.采用重心坐标定义三角形,三角形上的任意点可以表示为:P = w V0 + u V1 + v V2, 其中u+v+w = 1. 由此,将射线方程代入上式,则:
P0 + tV = (1 - (u+v)) V0 + uV1+vV2.
利用克莱姆法则计算得出t,u,v. 交点位于三角形内的条件为: 0 <= u <= 1, 0 <= v <= 1, 0 <= u+v <= 1. 否则位于三角形外部的平面上。
该方法是Moller, Trumbore与1997年提出的。
下面我们用代码实现(c++):
当有大量射线和三角形求交的时候,计算是很耗时的。下面我们用TBB库来实现并行计算。我们使用TBB提供的parallel_for. 为了使用parallel_for,我们需要定义一个函数对象类来包装计算的代码:
在ParallelComputeIntersections2::operator()中,我们加入了一些代码来快速判断一条射线和一个三角形有没有可能相交。这些代码对于提高运算速度是很有用的。经过在我本地的数据集测试中(约2万个射线和2万个三角形),这个判断使原来18s的计算时间减少到15s.
下面是主函数
代码中使用了TBB提供的一个并行向量来存储运算结果。
使用上面提到的数据集测试,在我的双核笔记本上结果如下.
在没有加入快速判断代码的情况下:
顺序计算:38.25s
并行计算:18.57s
加入快速判断代码的情况下:
顺序计算:26.31s
并行计算:15.11s
默认TBB会根据当前CPU核的数量来设置并行任务数量。从结果来看,效果还是比较明显的。
- 射线与三角形求交的计算
- 射线与三角形求交
- 探索射线与三角形求交的方法
- 三角形跟射线求交
- 射线与三角形求交,并判断是否在三角形内的完整代码(带测试)
- 射线与平面求交
- 再次修订后的版本。。。。。。1.0(发布版,射线求交三角形)
- 线段与三角形求交
- hdu3692 三维计算几何,射线与平面交,点的旋转
- 通过射线求交实现物体的拾取
- OpenGL: 通过射线求交实现物体的拾取
- 求平面切割三角形的交线
- 空间三角形与射线相交并求交点的重心坐标系表示
- 空间三角形与射线相交并求交点的重心坐标系表示--转
- 三角形与射线相交
- poj2986A Triangle and a Circle (圆与三角形求交)
- OSG 求射线与模型的交点
- 计算射线与平面的交点
- 电子阅读器 e-book reader
- Greystripe - Mobile Ads
- Go off on someone 对某人大发脾气
- [英语阅读]2010年内衣新宠:抗皱文胸
- 随机数生成器应该如何单元测试?
- 射线与三角形求交的计算
- 拉闸限电 power rationing
- 2009年十大网络流行语英文版
- window.event对象详细介绍
- 如何让弹出的窗口跟IE 大小变化而始终剧中。
- 家用小型路由器级联
- struts2学习之错误:Exception starting filter struts2
- SAP FICO 财务成本知识
- 修复被设置为unused的字段