我正在寻找一种将常规网格高度(例如1024x1024)转换为三角形不规则网络的算法。这是一个显示三角形不规则网络示例的图像:
我在互联网上寻找转换它的算法,但我找不到一个。基本上三角形密度取决于粗糙度和/或像素误差(栅格化时)或类似的东西。
答案 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)
只是一个想法。通过递归细分,可以很好地表示地图。
假设要覆盖的区域是三角形。首先检查三角形是否适合内部高度。如果是,请将其留在网格中。如果不是在三角形中选择一个点并将其分成三个三角形并继续它们。
检查三角形近似是否容易,计算高度曲线和三角形之间的体积。对于分割点,选择三角形中心更容易,但该方法将产生非常规则的网格。也许可以使用一些统计方法来更快地覆盖数据中的颠簸。我认为使用平均位置是有道理的。