如何判断给定点是否在STereoLithography(.stl)文件对象c++内
How can you tell if a given point is inside a STereoLithography (.stl) file object c++
我正在尝试确定一个点是否在从STereoLithography(.stl)文件导入的多面体内。我想知道是否已经有一个C++解决方案/库可以解决这个问题。
我希望避免对Matlab解决方案进行炮轰
这个问题的理论有点简单,当你从一个点到外面时,你必须通过奇数个面(三角形)。
一些伪码
Vector3d toOutside { point, pointOutside }; // !!! how do we know a point is outside ?!?
for_each(triangleList, [&count, =toOutside](Triangle& triangle) {
if (Intersect(triangle, toOutside) // some fussiness with edges and triangle points.
++count;
}
if (count %2 == 1)
isInside = true;
else
isOutside = false;
找到多面体外的一个点,找到最高的x、y、z,并将其加1.0。
伪教授[ToDo:链接到具有更严格教授的文章]
简单的情况是一个盒子,如果我们在一个盒子里,如果我们遵循toOutside向量,就会有一个与边的交点。如果我们在一个多面体内部,那么如果我们穿过一个三角形,我们就在外部,如果我们再穿过两个三角形(向内和向外),我们仍然可以判断我们在内部。如果我们实际上在多面体之外,当遵循toOutside向量时,我们将通过偶数个三角形(或零)。
geometrictools的C++实现在数学->包容->多面体中的点->3D下查看.h和.inl文件。
可能有一些更优化的测试使用外部的法向量
此外,如果有多个对象需要进行测试,请考虑为每个对象制作一个边界框以用于剔除,因为矢量测试可能会很昂贵。
相关文章:
- STL 的头文件
- 在函数 C++14 中包含 STL 头文件
- 如何使用 STL C++读取文件和保存连字符
- 如何使用 STL 中的容器读取文件
- 修复可能损坏的 .stl 文件上的法线
- 将STL文件添加到QT小部件
- 如何为C++ STL 模板文件生成标记文件,例如未来
- 使用.txt文件填充 STL 列表不起作用
- C 库从3D文件格式(例如STL)获得常规网格
- 将多个 stl 文件合并为一个
- 导入 .C++ 中的 STL 文件?
- 如何将 STL 映射保存到文件C++
- 对 stl 的头文件
- 显示一个错误(在Visual Studio中),当某人试图在当前.cpp或.h文件中使用STL时
- 包括(STL)标题中的标题文件
- 如何使用 STL 将 STDIN 转储到文件中C++
- 将文件读取到stl矢量时删除rn
- 如何将RAW文件(3D图像)转换为STL格式
- STL容器,用于在C++中组合多个非常大的光栅数据文件
- STL正在从文件中读取