这是一个关于this question的简化问题。基本上,我只是在问问题中的第一个问题。
假设我有两组meshes,Mesh类的定义如下(C#语法):
public class Mesh
{
public List<Element> elements;
public List<Point> points;
}
public class Element
{
public List<int> PointIndex;
}
public class Point
{
public double X;
public double Y;
}
有没有什么有效的方法/实现来找到两个Mesh
之间的布尔运算的结果(在我的例子中,我希望找到多边形样式的交集)?
最简单的方法是遍历Mesh
对象中的所有Element
,检查另一个Mesh
对象中的其他Element
,并获得结果。
但我相信有更有效的算法可以做到这一点--utilizing plane sweeping algorithm。
如果这样的算法已经在其他地方实现了,无论是在.Net、C++还是MatLab中,情况都会更好。
4条答案
按热度按时间9q78igpj1#
仅有网格不足以对其执行布尔运算。
在这些附加信息之后,布尔运算就变得微不足道了:
但从这种结构中获取网状结构要困难得多。你不会从中得到任何有用的东西。最好的解决方案是类似行进立方体的东西,从那里得到的网格看起来不会很好。
nmpmafwu2#
网格布尔运算很难正确执行,您尝试使用一些现有代码是正确的。
CGAL是一个可以满足您需求的现有C++库。
你可以看看manual。
yws3nbqq3#
在C++开源库MeshLib中,有一个针对三角网格的快速而健壮的Boolean operations实现。
这是一个基于MeshLib的video的MeshInspector应用程序,作者甚至声称可以对中等复杂的网格实时执行这些应用程序。
rqcrx0a64#
在C中,如果保持网格的排序(或在操作之前对它们进行排序),并使用std::set_cross,则可以更有效地完成此操作。要做到这一点,您必须向Point添加某种排序关系。(该语言将自动为其他类生成排序操作符,假设在C中,List是一个标准容器;可能是向量或双端队列)。