5

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

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

4

4 回答 4

4

请参阅此问题:如何从高程栅格近似矢量轮廓?

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

于 2009-03-12T21:05:01.287 回答
1

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

于 2009-03-12T20:54:59.363 回答
1

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

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

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

于 2009-03-13T15:51:48.520 回答
0

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

于 2009-03-12T21:19:07.527 回答