绘制二维隐式标量场的等值线

5
我有一个在二维空间中定义的隐式标量场,对于二维空间中的每个点,我可以计算出一个精确的标量值,但这是一个相当复杂的计算。
我想要画出该表面的等值线,比如'0'值的线。函数本身是连续的,但'0'等值线可以有多个连续实例,并且不能保证它们都是连接的。
为每个像素计算值不是一个选项,因为那将需要太多时间——几秒钟的时间,而这需要尽可能实时。
我目前使用的是空间的递归分割,可以看作是一种四叉树。我对空间进行了一个非常粗略的采样,如果发现一个正到负值的转换包含在一个正方形中,我就会递归地将其分成4个更小的正方形并再次检查,直到像素级别。正负转换是通过对其4个角进行采样来检测的。 这个方法工作得相当不错,但有时等值线会被切断,因为转换检测对于在边缘的小区域内发生的转换失败,而且不会穿过正方形的角。
在这种情况下,有更好的方法来绘制等值线吗?
1个回答

6
我在这里描述的算法http://web.archive.org/web/20140718130446/http://members.bellatlantic.net/~vze2vrva/thesis.html,讨论了自适应轮廓(类似于您描述的内容)以及轮廓绘制中的其他问题。我已经成功地运用了这些算法。
没有一种通用的方法可以保证找到函数的所有轮廓,而不查看每个像素。可能会存在一个非常小的闭合轮廓,在该区域内仅有大约一个像素大小的函数为正值,在函数通常为负值的区域内。除非您对样本进行足够精细的采样,使样本位于正区域内,否则无法一般性地知道它是否存在。
如果您的函数足够平滑,您可能能够猜测这样的小闭合轮廓位于何处,因为函数模量在其周围区域变小。然后,只需在这些区域内进行更精细的采样即可。

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