5

我有一个在 2D 中定义的隐式标量场,对于 2D 中的每个点,我都可以让它计算一个精确的标量值,但它的计算有点复杂。
我想画一条该表面的等值线,比如“0”值的线。函数本身是连续的,但“0”等值线可以有多个连续实例,不能保证所有实例都连接。
计算每个像素的值不是一种选择,因为这会花费太多时间 - 大约几秒钟,并且需要尽可能实时。

我目前使用的是空间的递归划分,可以被认为是一种四叉树。我对空间进行了一个初始的、非常粗略的采样,如果我找到一个包含从正值到负值的过渡的正方形,我将它递归地划分为 4 个较小的正方形并再次检查,在像素级别停止。通过在其 4 个角采样一个正方形来检测正负转换。这工作得相当好,除非它没有。绘制的等值线有时会被剪切,因为对于发生在边缘的小区域且不跨越正方形角的过渡,过渡检测失败。

在此设置中是否有更好的方法来绘制等线图?

4

1 回答 1

6

我在这里描述的算法取得了很大的成功http://web.archive.org/web/20140718130446/http://members.bellatlantic.net/~vze2vrva/thesis.html 讨论自适应轮廓(类似于您所描述的),以及一般等高线绘图的其他一些问题。

在不查看每个像素的情况下,没有通用的方法可以保证找到函数的所有轮廓。可能有一个非常小的闭合轮廓,其中函数为正的区域仅约为像素大小,而函数通常为负。除非您的采样足够精细,以至于您将样本放在阳性区域内,否则没有一般的方法可以知道它在那里。

如果您的函数足够平滑,您可能能够猜到这些小的闭合轮廓所在的位置,因为函数的模数在它们周围的区域中变得很小。然后可以仅在这些区域中细化抽样。

于 2008-10-23T21:46:04.317 回答