我有一个在2D中定义的隐式标量字段,对于2D中的每个点,我可以使它计算精确的标量值,但它的计算有点复杂.
我想绘制该表面的等值线,比如'0'值的线.函数本身是连续的,但'0'等值线可以有多个连续实例,并且不能保证它们都连接在一起.
计算每个像素的值不是一种选择,因为这将花费太多时间 - 大约几秒钟,这需要尽可能实时.
我目前使用的是空间的递归划分,可以将其视为一种四叉树.我对该空间进行初始的,非常粗略的采样,如果我找到一个包含从正值到负值的转换的正方形,我递归地将其划分为4个较小的正方形并再次检查,停在像素级别.通过在其4个角中对sqaure进行采样来检测正 - 负转换.这项工作相当不错,除非它没有.绘制的等值线有时会被切割,因为过渡检测对于在边缘的小区域中发生并且不穿过正方形的角的过渡而失败.
有没有更好的方法在此设置中进行等值线绘制?
我在这里描述的算法http://web.archive.org/web/20140718130446/http://members.bellatlantic.net/~vze2vrva/thesis.html 上讨论了自适应轮廓(类似于你描述的那些),以及一般的轮廓绘图的一些其他问题.
没有通用的方法来保证找到函数的所有轮廓,而不是查看每个像素.在功能通常为负的区域中,可能存在非常小的闭合轮廓,其中区域仅大约为功能为正的像素的大小.除非你的样品足够精细,你将样品放在阳性区域内,否则没有一般的方法可以知道它在那里.
如果你的功能足够平滑,你可以猜出这些小的闭合轮廓在哪里,因为函数的模数在它们周围的区域变小.然后可以仅在这些区域中对采样进行细化.