我正在尝试使用这种方法开发水平表面可视化器(不知道这是标准方法还是有更好的方法):
-
1. 取任何函数
f(x,y,z)=k
(其中 k 是常数),以及 x、y 和 z 的界限。还要接受两个网格参数 stepX 和 stepZ。
-
2. 减少到水平曲线问题,从 zMin 迭代到 zMax 与 stepZ 间隔。所以
f(x,y,z)=k => f(x,y,fixedZ)=k
-
3. 用 stepX 做同样的过程,把问题减少到
f(fixedX, y, fixedZ)=k
-
4. 求解
f(fixedX, y, fixedZ) - k = 0
满足该方程的所有 y 值(使用某种求根算法)。
-
5. 对于生成的所有点,将它们绘制为水平曲线(内部循环在给定 z 处生成水平曲线,然后对于不同的 z 值,只有水平曲线堆叠)
-
6(可选)。从属于水平集的这些水平曲线/点生成网格。
我遇到的问题是第 4 步。我无法事先知道 y 有多少可能的值将满足该等式(更具体地说,y 有多少唯一和真实的值)。
此外,我试图使程序尽可能通用,因此我试图不将原始函数f(x,y,z)=k
限制为任何约束,例如平滑度或除 k 以外的多项式必须按照水平表面的要求保持不变。
是否有一种算法(不使用 CAS/符号求解)可以识别函数的根,即使它有多个根?我知道二分法很难解决这个问题,因为该区域可能没有符号变化,但是割线/牛顿法的效果如何?割线/牛顿法可以用于哪组函数,它能否检测并找到两个给定范围内的所有唯一实根?还是有更好的方法来生成/可视化水平面?