双曲面部分的三维图

时间:2012-09-18 05:53:23

标签: matlab 3d plot

我想以下面的方式绘制一个夸张的3D图形(图)

任何想法?enter image description here

1 个答案:

答案 0 :(得分:1)

好的,这是我的问题所在。这是我一直在使用的实验脚本:

%%# first part    
%#------------------

clf

%# use cylinder to get unit cone
[x,y,z] = cylinder( linspace(1, 0, 1e3), 1e3);

%# intersect the cone with this surface
inds = z < (cos(x).*sin(pi*y/2)+1)/4;

x(inds) = NaN; %# remove all corresponding 
y(inds) = NaN; %# indices, in all arrays
z(inds) = NaN;

%# Now plot the cone. Note that edges are ugly when 
%# using a large number of points
surf(x, y, z, 'edgecolor', 'none');

%%# second part
%#------------------

hold on

%# the surface to intersect the cone with
f = @(x,y) (cos(x).*sin(pi*y/2)+1)/4;

%# add the surfacfe to the cone plot
[x,y] = meshgrid( linspace(-1,1, 1e3) );
surf(x,y, f(x,y), 'edgecolor', 'none')

第一部分显示了一条与曲线相交的圆锥体。您可能希望对曲线进行一些修改以使整体形状正确,这是第二部分的用途。

如果你想要一个抛物面(或其他),只需使用

[x,y] = meshgrid( linspace(-1,1, 1e3) );
z = 1-x.^2-y.^2;  %# or whatever other equation

而不是cylinder命令。