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

Math 绘制二维隐式标量场的等值线,math,graphics,function,2d,contour,Math,Graphics,Function,2d,Contour,我在2D中定义了一个隐式标量场,对于2D中的每个点,我可以让它计算一个精确的标量值,但这是一个有点复杂的计算。 我想画一条曲面的等值线,比如说“0”值的线。函数本身是连续的,但“0”iso行可以有多个连续实例,并且不能保证所有实例都已连接。 计算每个像素的值不是一个选项,因为这将花费太多的时间-在几秒钟的顺序,这需要尽可能实时 我现在使用的是一种递归的空间划分,可以看作是一种四叉树。我对空间进行了初始的、非常粗略的采样,如果我发现一个正方形包含从正值到负值的转换,我递归地将它划分为4个较小的正方

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

我现在使用的是一种递归的空间划分,可以看作是一种四叉树。我对空间进行了初始的、非常粗略的采样,如果我发现一个正方形包含从正值到负值的转换,我递归地将它划分为4个较小的正方形,然后再次检查,在像素级停止。正-负跃迁是通过在其4个角上采样一个sqaure来检测的。 这项工作做得相当好,除非它不起作用。绘制的iso线有时会被剪切,因为对于发生在边的一个小区域内且未穿过正方形角的过渡,过渡检测失败


在这种情况下,有没有更好的方法来绘制iso线条?

我在这里介绍的算法方面取得了很大的成功 其中讨论了自适应等高线绘制(与您描述的类似),以及等高线绘制的其他一些问题

如果不查看每个像素,就无法保证找到函数的所有轮廓。在函数通常为负的区域中,可能存在一个非常小的闭合轮廓,其中一个区域的大小只有函数为正的像素大小。除非你足够精细地采样,将样本放在正区域内,否则没有一般的方法知道它在那里

如果你的函数足够光滑,你也许能够猜出这样小的闭合轮廓在哪里,因为函数的模在它们周围的区域变小了。然后,只能在这些地区对采样进行改进