【问题标题】:How can I convert a regular grid of heights to a triangular irregular network?如何将规则的高度网格转换为三角形不规则网络?
【发布时间】:2013-12-16 23:33:05
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    我还在网上找到了这篇关于 TIN 的文章,其中提到了实际算法:http://www.cs.uu.nl/docs/vakken/gis/TINalg.pdf。看看 2.4.2 “从网格到 TIN”。

    【讨论】:

      【解决方案2】:

      我认为网格简化算法可以满足您的需求。我假设大三角形是一个区域中几乎共面的三角形的组合。

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

      【讨论】:

        【解决方案3】:

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

        这种不规则性是使用 voronoi 镶嵌获得的,最初的问题归结为寻找点采样分布。

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

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

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

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

        为了缓解修剪块的问题,可以在启动时生成更多点,然后块可以小得多,这将在两个方面都有好处(良好的抗锯齿和良好的局部性)。但是这会花费更多的 CPU 时间。

        点分布确定后,就是经典的voronoi tesselator,google上有几百个。

        【讨论】:

          【解决方案4】:

          只是一个想法。使用递归细分创建地图的良好表示。

          假设要覆盖的区域是一个三角形。首先检查该三角形是否是内部高度的良好近似值。如果是,则将其留在网格中。如果不是,则选择三角形内的一点并将其分成三个三角形并继续。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-03-08
            • 1970-01-01
            • 2021-11-17
            • 2013-08-26
            • 2013-03-13
            • 2017-01-21
            相关资源
            最近更新 更多