从均匀间隔的数据生成等高线

5
我目前正在进行一个数据可视化项目。我的目标是从网格数据中生成等高线,也就是说,iso-lines。数据可以是温度、天气数据或任何其他环境参数,但唯一的条件是它必须是定期间隔的。我在互联网上搜索过,但是我找不到一个好的算法、伪代码或源代码来从网格中生成等高线。有人知道一个库、源代码或者算法可以从网格数据中生成等高线吗?如果你的建议有很好的运行时间性能,那就太好了,我不想让我的用户等太久 :)
编辑:感谢回复,但等高线有一些限制,比如不能相交,所以仅仅生成贝塞尔曲线并不能实现我的目标。

请查看我在 https://dev59.com/yU7Sa4cB1Zd3GeqP7NyL#13296170 的回答。 - ProfNimrod
4个回答

4

这是一个重复的内容。"gridded data" <=> "raster data", "data" <=> "elevation", 等等。 - Jason S

1

GNUplot提供了一些相当不错的轮廓绘制功能 - 如果您可以使用GPL代码,这可能会有所帮助。


1
如果您的数据是按照规律间隔放置的,那么这个问题可以相对容易地解决(假设我正确理解了您的问题)。首先,您需要确定轮廓线的间隔。接下来,创建一个网格来存储轮廓信息(我假设只是简单的开/关或者高程数据),该网格应该比源数据小一个间隔。
现在,关键在于将两个网格偏移半个间隔(实际上不会在代码中显示,但这是我在处理的概念),并比较计算轮廓数据网格中当前点周围的4个坐标。如果4个点中有任何一个点处于不同的间隔范围内,则轮廓网格中的该“像素”应设置为true(或者设置为穿越的轮廓范围的值)。
使用这种方法,当间隔太细时,会出现几个轮廓重叠的问题。

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接