简介
隐函数的通常形式为F(x,y)=G(x,y)
或F(x,y)=0
遍历法
对于每个像素点都计算其函数值,如等于0或绝对值小于一个阈值,则判断函数经过该像素。如要提高精度则需要减小步长,效果不佳。
Marching Squares
该算法通常用于等高线绘制,而隐函数就是F(x,y)=z
在z=0处的截面。该算法判断一个单位方块四个角的z值正负,如同时出现正负,则说明该方块中必然有函数图像穿过,但如全正全负则无法判断,需进一步计算。该算法特点是绘制效率高,但可能会绘制出不属于函数图像的点,在图像有交叉处会出现缺少图像的问题。是激进的。
广义区间算术
该算法专注于隐函数绘制,与传统区间算术不同,塔伯广义区间算数引入了区间集合(Set),和Def(定义域是否完整),和Cont(是否连续),相比传统区间算数精准度有大量提升,可以解决不连续的函数图像。以下的展示即使用该算法绘制。但该算法面对x-x
与x/x
问题时效果不佳,会出现大量误差,往往需要其他算法如Marching Squares修正。Sympy库的plot_implicit
函数即使用该算法。是保守的。
仿射算术
该算法是区间算术的进阶,特点是将区间x转化为x+x0*e0+x1*e1....xn*en
(en为噪声,xn为参数,x为基准值) 一定程度解决了x-x
的问题(噪声可以相减抵消,准确地等于0)但对于乘法误差仍然较大,不支持除法,不支持数学函数。