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