如何将常规网格高度转换为三角形不规则网络?

时间:2013-12-16 23:33:06

标签: networking terrain polygon level-of-detail mesh

我正在寻找一种将常规网格高度(例如1024x1024)转换为三角形不规则网络的算法。这是一个显示三角形不规则网络示例的图像:

Triangular irregular network

我在互联网上寻找转换它的算法,但我找不到一个。基本上三角形密度取决于粗糙度和/或像素误差(栅格化时)或类似的东西。

4 个答案:

答案 0 :(得分:1)

查看相关问题的答案:https://stackoverflow.com/a/20859459/3146587

我还在TIN上在线发现了这篇文章,并引用了实际的算法:http://www.cs.uu.nl/docs/vakken/gis/TINalg.pdf。看看2.4.2“从网格到TIN”。

答案 1 :(得分:0)

我认为网格简化算法会做你想要的。我假设大三角形是区域中几乎共面三角形的组合。

下面的一些讨论: http://webdocs.cs.ualberta.ca/~anup/Courses/604_3DTV/Presentation_files/Polygon_Simplification/7.pdf

答案 2 :(得分:0)

简化确实是首先出现的想法之一。但这并不像原生解决方案那样干净。

使用voronoi tesselation获得这种不规则性,原始问题沸腾到找到点采样分布。

为了找到这些点,它可以以泊松分布的形式实现,其密度由高度图的偏导数之和沿x和y驱动。可以根据经验微调来调整度量(例如max而不是总和)。

如果分布遵循泊松分布,则分布将更好地避免混叠,但是可以应用其他模式,如扫描线算法,其将逐行进行并根据导数的绝对值确定下一距离。然而,线之间的距离将是规则的,这将导致沿x的统计一致性,这不如Karl发布的原始图片那样好。这就是我在这种情况下提出泊松的原因。

通过在整个地图上使用规则的均匀泊松,可以简化泊松分布,然后根据导数绝对值最低的区域进行点分析。

可以在块中决定撬开,在整个区域中预先细分数百个子块,并且对于每个块,取该块中衍生图的大量采样的总和。如果值很低,则随机修剪很多点。使用这种方法,块将有机会包含多个点,使得prunning在统计上是干净的。但是,较大的块也会导致具有高度变化导数的区域中的分辨率较差(原始高度图的二阶导数很强)。因此,应该进行经验性微调以确定理想的块大小。

为了缓解prunning块的问题,可以在启动时生成更多的点,并且块可以小得多,这将在两个方面带来好处(良好的抗锯齿和良好的局部性)。但是,它需要更多的CPU时间。

点数分布确定后,它是一个经典的voronoi tesselator,谷歌上有数百个。

答案 3 :(得分:0)

只是一个想法。通过递归细分,可以很好地表示地图。

假设要覆盖的区域是三角形。首先检查三角形是否适合内部高度。如果是,请将其留在网格中。如果不是在三​​角形中选择一个点并将其分成三个三角形并继续它们。

检查三角形近似是否容易,计算高度曲线和三角形之间的体积。对于分割点,选择三角形中心更容易,但该方法将产生非常规则的网格。也许可以使用一些统计方法来更快地覆盖数据中的颠簸。我认为使用平均位置是有道理的。