【问题标题】:Generating contour lines from regularly spaced data从规则间隔的数据生成等高线
【发布时间】:2010-10-13 00:41:24
【问题描述】:

我目前正在从事数据可视化项目。我的目标是从网格数据中生成等高线,也就是等值线。数据可以是温度、天气数据或任何其他类型的环境参数,但唯一的条件是它必须定期间隔。 我在互联网上搜索,但是我找不到从网格生成轮廓线的好算法、伪代码或源代码。 有人知道从网格数据生成轮廓线的库、源代码或算法吗? 如果您的建议具有良好的运行时性能,那就太好了,我不想让我的用户等这么久:)

编辑:感谢您的回复,但等值线有一些限制,比如它们不应该相交 所以仅仅生成贝塞尔曲线并不能实现我的目标。

【问题讨论】:

标签: c++ algorithm grid contour


【解决方案1】:

看到这个问题:How to approximate a vector contour from an elevation raster?

它几乎是重复的,但使用了完全不同的术语。您会发现制图学和计算机图形学解决了许多相同的问题,但使用不同的术语。

【讨论】:

  • 那是重复的。 “网格数据”“栅格数据”、“数据”“海拔”等
【解决方案2】:

在 GNUplot 中有一些相当不错的轮廓可用 - 如果您能够使用 GPL 代码可能会有所帮助。

【讨论】:

    【解决方案3】:

    如果您的数据定期放置,这可以相当容易地完成(假设我正确理解您的问题)。首先,您需要确定您想要轮廓的间隔。接下来创建将用于存储等高线信息的网格(我假设在此等高线级别的数据类型中只是一个简单的开/关或高程),它应该比源数据小一个间隔。

    现在这里的技巧是将 2 个网格偏移 1/2 个间隔(实际上不会出现在这样的代码中,但它是我在这里处理的概念)并比较当前周围的 4 个坐标点在您正在计算的等高线数据网格中。如果这 4 个点中的任何一个在不同的区间范围内,则等高线网格中的“像素”应设置为 true(或正在跨越的等高线范围的值)。

    使用这种方法,当间隔太细时会出现问题,导致多个轮廓相互重叠。

    【讨论】:

      【解决方案4】:

      正如 Paul Tomblin 的链接所暗示的,贝塞尔曲线(B 样条的子集)是解决您问题的成熟方法。如果运行时性能是一个问题,贝塞尔曲线还有一个额外的好处是可以通过非常快速的 de Casteljau 算法构造,而不是根据参数方程绘制它们。如果您使用 DirectX,它有一个用于 de Casteljau 的库函数,但使用描述它的 1001 个网页自己酿造一个应该不难。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-03
        • 1970-01-01
        • 2013-09-17
        • 2013-10-08
        • 2015-01-16
        • 2022-09-24
        • 1970-01-01
        相关资源
        最近更新 更多