多边形三角剖分 c#

6
我需要计算一个多边形的三角形。该多边形可以包含空洞。并且需要高效的方式。因此,我认为我需要约束Delaunay三角剖分。
我必须在C#中完成这项任务,只需要进行计算而不是绘图或其他操作。
看起来poly2tri很不错,但是我不知道为什么它对我不起作用:S
无论如何,我需要帮助。我应该如何计算这些三角形?(如果你最好的建议是poly2tri,我可以在上面解释我的问题)

你在使用poly2tri时遇到了什么问题? - Reed Copsey
当我将其适应到我的代码中时,我遇到了一个空参数问题,但我期望得到相同的结果。看一下js,因为它更清晰(所有内容都在一个文件中)。在CreateAdvancingFront()中三角化我们的起始点,它会分配front变量。front变量有两个节点:head和tail。正如你所看到的,head没有prev值。让我们继续调用sweep.SweepPoints,调用sweep.PointEvent。在开始时,你会看到"var node = tcx.LocateNode(point);",SweepContext将调用front.LocateNode,而search_node是head。而head具有最大的X值。所以"if (x < node.value) {"将发生。 - user1708062
头部没有前一个节点,因此返回null。所以我们会得到错误。 - user1708062
你能详细说明一下你是如何修复poly2tri的问题,并可能将其贡献给googlecode项目吗?(“我更改了一些代码行,目前似乎可以工作”)谢谢! - Erwin Coumans
2个回答

3

Delaunay不是为此而设计的。但是约束Delaunay是为此而设计的。顺便说一句,Ear Clipping在某些多边形上似乎有点慢,并且得不到结果。 - user1708062
你也可以使用QuickHull算法将2D顶点投影到3D抛物面上,使用Delauney三角剖分。一旦完成三角剖分,删除中心点位于多边形轮廓外部或内部孔洞的面。这可能比耳剪辑更快。 - kneo

2

我想在 github:gist 上分享我的简单解决方案(但这已经相当老,可能不是最佳选择)。


谢谢,我会检查一下,如果无法修复poly2tri。顺便说一句,我觉得我在算法(poly2tri)上找到了一些东西。我更改了一些代码行,似乎现在可以工作了。Poly2tri算法在js、c、c++、c#和java版本以及其他可能的版本中,在InitTriangulation()上存在一个错误。我将继续测试我的修复方案。 - user1708062

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接