2008-10-23 22 views
5

我有一个隐含的标量字段在2D中定义,对于2D中的每个点,我可以使它计算精确的标量值,但它的计算有点复杂。
我想绘制该表面的等值线,例如'0'值的行。该函数本身是连续的,但'0'iso行可以有多个连续的实例,并不保证它们都连接。
计算每个像素的值不是一个选项,因为这会花费太多时间 - 大约几秒钟,这需要尽可能实时。绘制2D隐式标量字段的等值线

我目前使用的是可以被认为是一种四叉树的递归空间分割。我首先对空间进行非常粗略的采样,如果我发现一个正方形包含从正值到负值的转换,我递归地将其分为4个较小的正方形,然后再次检查,在像素级停止。通过在其四个角落采样一个sqaure来检测正反转换。 这个工作相当好,除非没有。绘制的等值线有时会被切断,因为转换检测失败,因为转换发生在边缘的小区域内,并且不会穿过正方形的拐角。

有没有更好的方法在此设置中进行等值线绘制?

回答

6

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

没有通用的方法来保证查找函数的所有轮廓,而无需查看每个像素。可能会有一个非常小的封闭轮廓,其中一个区域只有一个像素大小的函数为正,在函数通常为负的区域。除非您抽样精细到在正区域内放置样品,否则没有一般的方法知道它在那里。

如果你的函数足够平滑,你可能会猜测出这样的小闭合轮廓在哪里,因为函数的模数在它们周围的区域变小。然后只能在这些地区对抽样进行细化。

+0

该论文的链接已死(404)。 – IAbstract 2014-11-08 17:05:48