使用给定的 Delaunay 三角剖分在 Java 中绘制等高线

Contour lines drawing in Java with a given Delaunay triangulation

我目前正在写我的硕士论文,我得到了:

我的任务是使用此三角测量并在给定的 z 值处绘制等高线。 通过实施维基百科样条插值,我几乎成功地做到了这一点:https://en.wikipedia.org/wiki/Spline_interpolation

我的问题是,在实现样条曲线时,轮廓线相互交叉,而线性绘图当然不会交叉。

Parametric cubic spline interpolated contour lines

如果您查看屏幕底部,您会看到两条等高线交叉,我没有足够的声望点来证明线性绘图没有。您还可以看到,从一点到另一点,边缘太圆了。 我试过的是在任何一对点之间插入更多的点以沿线制作更多的结点,这是为了进一步限制它们,但是为了获得非交叉线,样条曲线看起来太像一个线性绘图而不是中规中矩

我想知道的不是实际的代码实现方式,而是指向方式、读数等的指针。 (注意,我将从头开始制作,没有库)。

问题:如何制作一个高阶多项式函数,它不会在其对应的线性函数之外弯曲太多。太多了,我的意思是给定的等高线比方说 50 米,它不会在 60 米处穿过等高线。

非常感谢任何帮助。

几年前我解决了类似的任务。 这是我的一些工作笔记。可能会对你有所帮助。

  1. 参考 github 上的 XoomCode AcidMaps 插件: https://github.com/XoomCode/AcidMaps/tree/master/examples/isolines

这是一个演示: http://ams.xoomcode.com/flex/index.html 例如,将渲染器类型 "Sparse" 和插值策略设置为 "Linear",然后按 "Update" 按钮。

  1. 参考 VividSolutions JTS Java 库: http://www.vividsolutions.com/jts/download.htm

  2. http://mike.teczno.com/notes/curves-through-points.html

  3. http://blog.csdn.net/xsolver/article/details/8913390

您可以尝试加权 delaunay 三角剖分。它被定义为欧氏距离减去权重。