【发布时间】:2014-06-29 03:08:41
【问题描述】:
我想通过 GeoTools 细分国家形状,以便在地球表面以 3D 形式显示它。 GeoTools 使用 JTS 拓扑套件,内部看起来功能丰富。
它是否包含细分某些形状的实用程序?我看到有 triangulation 包,但不知道如何将它用于带孔的形状。
我也用它不仅像这里那样连接现有顶点
它应该用内部的多个顶点填充形状。
更新
我发现,JTS 包含 ConformingDelaunayTriangulationBuilder 类,它允许以某种方式制作所需的镶嵌,但效果不佳。首先,它只允许约束,这意味着需要额外的代码来从凹入区域中删除三角形。而且它还试图保留曲面细分的 Delaunay 特性,这会导致创建许多额外的部分。
最后它会导致ConstraintEnforcementException 用于复杂的形状,如国家和不可用。
我还发现了"triangle" package,它是用 C 语言编写的,实现了Chew's second algorithm 并且运行良好
现在我想知道,它是移植到 Java 还是封装到其中?
【问题讨论】:
-
我绝不是一个足够熟练的程序员来为您提供解决方案,但也许您可以从边缘的顶点列表开始。然后,在形状内找到一个点并将最近的顶点连接到它。然后,在更远的地方找到一个点,然后重复。这样做直到每个顶点 A(连接的边数最少)或 B(点之间的距离永远不会超过 x 距离)。无论哪种方式,上面的朴素算法都只连接现有点;您所需的算法必须在现有点附近创建新点。
-
想早点评论一下:创建一个“好的”三角测量真的具有挑战性。我使用来自 www3.math.tu-berlin.de/jtem/numericalMethods 的
Ruppert类取得了一些有希望的结果,但它不处理漏洞。我认为您提到的“三角形”包是 THE 三角测量解决方案(它真的很好)。但是 - 它以一种可怕的、可怕的“C”方式实现,甚至不能远程移植到 java(永远不会......可怕)。有一次我用 JNI 为这个库写了一个小包装器,但它还没有发布,可能还需要一些清理。 -
@Marco13 也许您应该尝试我的回答中建议的库:) 到目前为止对我来说效果很好......
-
@DarkCygnus 那里有一些 (java) 三角测量库 (see github),但从“按照维基百科的描述实现耳朵修剪”到 良好、健壮 具有 steiner 点、孔处理、角度约束等的库。您链接到的库至少看起来很重要,并且维护和测试了一段时间(尽管在测试之前我不会投票)。很遗憾,
trianglelib 的创建者没有响应我为他的 lib 发布 Java 绑定的请求... -
@Marco13 是的,试试看,到目前为止它对我来说效果很好。我在某个时候也考虑过 Triangle 库,但没有找到任何 Java 版本(现在我知道为什么了:/),并且还发现他们的许可证在计划商业化时有其限制。感谢您提供的其他链接,将检查它
标签: java mesh geotools tessellation jts