我正在尝试使用这种方法开发一个水平表面可视化器(不知道这是标准方法还是有更好的方法):
f(x,y,z)=k
(其中k是常数),并绑定x,y和z。同时接受两个网格参数stepX和stepZ。
醇>
f(x,y,z)=k => f(x,y,fixedZ)=k
醇>
f(fixedX, y, fixedZ)=k
醇>
f(fixedX, y, fixedZ) - k = 0
得到满足该等式的y的所有值(使用某种根寻找算法)。
醇>
我遇到的问题是第4步。我无法事先了解y有多少可能的y值满足该等式(更具体地说,y的唯一值和实数值)。
另外,我试图保持程序尽可能通用,所以我试图不将原始函数f(x,y,z)=k
限制为任何约束,例如平滑度或除k以外的多项式必须是常量,如水平表面。
是否有算法(不使用CAS /符号求解)可以识别函数的根,即使它有多个根?我知道二分法很难用于此,因为区域内没有任何符号变化的可能性,但割线/牛顿法的表现如何?使用割线/牛顿方法可以使用哪些函数集,并且可以检测并找到两个给定边界内的所有唯一真实根?或者是否有更好的方法来生成/可视化水平面?
答案 0 :(得分:2)
我想我找到了解决问题的方法。我做了一些研究,发现水平表面是等值面的同义词。因此,在理论上,像行进立方体方法应该有效。
答案 1 :(得分:2)
如果您需要Marching Cubes算法的示例,请查看
http://stemkoski.github.com/Three.js/Marching-Cubes.html
(使用JavaScript / Three.js作为图形)。
有关理论的更多详情,请查看
上的文章答案 2 :(得分:1)
一种简单的方法,
2D:以灰度为单位绘制颜色= floor(q * f(x,y))的图(x,y),其中q是某个任意因子。 3D:绘图(x,y,floor(q * f(x,y))
等效函数的有效高度将表示在同一水平面上。
如果要获得水平曲线,可以使用2D方法和边缘检测/区域分类来获得同一水平上的点(x,y)。