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

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

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

有帮助吗?

解决方案

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top