物体内部的3D点
3D Point inside object
我已经搜索和搜索了这个问题,但我不能真正理解我找到的任何答案。我的问题很简单:
有一个网格(由三角形构建的3D非凸多边形),我扫描空间(xyz),我需要找到网格"内部"的所有点,以便稍后处理。我再说一遍,我看过很多关于这个问题的答案,但我不能理解它们。
有人来帮忙吗??我假设你正在试图找出一个给定的点是否在一个网格内(否则,显然有无限数量的点)。
一个简单的解决方案是从该点(向任何方向)投射一条射线,并计算与它相交的三角形相交的数量。如果数是奇数,则点在里面。当光线碰到一条边或一个顶点时,必须注意将其算作一个交点。射线与三角形的相交是通过直线与平面相交来完成的,检查该点属于射线并且在三角形内。
检查每个点,看看它是否在网格内将工作,但我们可以从性能的角度做得更好。你目前的方法将在O(x*y*z*t)
中运行,因为点的网格是x
× y
× z
,网格有t
个面。
另一种方法,将在O(x*y*t)
中运行,是考虑穿过网格的网格线——找到线和网格之间的交点。交点的个数应该是偶数。一旦这些交点被排序,它们就定义了位于网格内部的线的区域。然后就可以很容易地生成直线上位于这些区域内的点。
大致(假设网格位于单位立方体内):
for each X in [0,1] {
for each Y in [0,1] {
Let P be a list of points of intersection between the mesh and the line from (X,Y,0) to (X,Y,1)
Sort P into ascending order of z-coordinate
Let I be false
for each Z in [0,1] {
if Z > P[0] {
I = !I
pop P[0] off the list
}
if( I ) {
point (X,Y,Z) is inside the mesh
}
}
}
}
相关文章:
- 将函数类成员映射到类本身内部
- 无法将结构注册为增强几何体3D点
- Boost Spirit,获取迭代器内部语义动作
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 内联函数中具有内部链接的全局变量
- 在函数内部的声明中初始化数组,并在外部使用它
- 如何在不知道向量大小的情况下输入向量内部的向量?
- OpenGL大的3D纹理(>2GB)非常慢
- 卷曲bracers内部结构的声明
- 从函数角度看ID到文件路径的内部与外部映射
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 如何在pugixml中获取节点的内部XML
- 使用C链接在函数内部创建C++模板
- 是什么导致了Unity 3D中的"错误线程异常"?
- 指针没有更新它在void函数内部指向的值
- 方法内部但循环仍得到预期的不合格id错误C++
- 是否可以制作没有内部分割的cgal 3d多多马因网格?
- 物体内部的3D点
- 在CGAL中确定一个点是在3D alpha形状曲面的内部还是外部
- 内部3D游戏开发与有限的硬件