isosurface函数求助

Python016

对于一般的三维隐函数绘图,可以使用isosurface函数:

n = 30

x = linspace(0, 100, n)

y = linspace(0, 2000, n)

z = linspace(0, 50, n)

[z, y, x] = meshgrid(x, y, z) 

v = 4.12*(z-50.48).^3 + 18.08*(y-2160).*(z-50.48) - 127.28*(x-21.56)

[faces,verts,colors] = isosurface(x,y,z,v,0,z) 

patch('Vertices', verts, 'Faces', faces, ... 

    'FaceVertexCData', colors, ... 

    'FaceColor','interp', ... 

    'edgecolor', 'interp')

xlabel z, ylabel y, zlabel x

view(-60,10)

需要说明的是,按图中要求,x-y-z三轴的数据应分别对应z-y-x,换言之,x和z互换,所以,代码中的meshgrid函数以及下面的表达式都要进行交换。

对于本题而言,函数可以写成z=f(x,y)显函数的形式,所以也可以直接用surf绘图:

x = linspace(0, 100, n)

y = linspace(0, 2000, n)

[x, y] = meshgrid(x, y)

z = (4.12*(x-50.48).^3 + 18.08*(y-2160).*(x-50.48)) / 127.28 + 21.56

surf(z, y, x, 'edgecolor', 'none')

xlabel z, ylabel y, zlabel x

xlim([0 50])

view(-75,6)

这里同样要注意调用surf函数时变量的互换。

如果不限制z的范围,画出来的曲面如下所示:

 

faces  是定义在detectObject函数的局部变量,函数外不能访问。

类似:

def test():

    a = [1,2,3,4]

print a

执行上面的代码,a就是undefined的。

C++泛型编程中,可以定义类模板或者函数模板,比如查找等算法函数,比如map(映射)类,vector(数组)等容器类。

在编译阶段,模板参数类们会被尖括号中的实际类们替换掉。

std::vector<T>就是数组容器类,尖括号表示里面的RECT是实际类,整体定义了faces对象是一个RECT数组。