scott198510 发表于 2011-12-8 19:08:13

圆台、棱台、不同回转体的绘制(~~搞定了)

本帖最后由 scott198510 于 2011-12-22 13:24 编辑

最近因需要,绘制一个封闭的圆台,和大家分享一下:

%%%%方法1:
= cylinder();%8是下底面半径,5是上地面半径
surf(X,Y,Z*10);%10是圆台的高度,取1时高度为默认值1
axis square;
hold on
alpha=0:pi/20:2*pi;%角度
R=8;%半径
x=R*cos(alpha);
y=R*sin(alpha);
plot(x,y,'-')
axis equal
fill(x,y,'b');%用蓝色填充
hold on
alpha=0:pi/20:2*pi;%角度
R=5;%半径
x=R*cos(alpha);
y=R*sin(alpha);
z=10*ones(1,41);
axis equal
fill3(x,y,z,'b');%用蓝色填充
set(gcf,'color','w')


方法2:

t= 0:pi/50:3;
= cylinder(5+t);
surf(X,Y,Z*10)%10是圆台的高度,取1时高度为默认值1
axis square
set(gcf,'color','w')


%%%%底面填充同上
现在的疑惑是怎样用简洁方法绘制母线是曲线的圆台,望斑竹大哥略显神通







scott198510 发表于 2011-12-19 23:13:21

本帖最后由 scott198510 于 2011-12-20 11:35 编辑

%母线向外弯曲

z = ;
r = sqrt(2-z);
t = linspace(0,2*pi,60);
= meshgrid(r,t);
x=r.*cos(theta);
y=r.*sin(theta);
z = repmat(z,numel(t),1);
surf(x,y,z)
xlabel('X')
ylabel('Y')
zlabel('Z')
axis equal

%母线向内弯曲
z =linspace(0.5,1.5,20);
r = 0.4.^(2-z);
t = linspace(0,2*pi,60);
= meshgrid(r,t);
x=r.*cos(theta);
y=r.*sin(theta);
z = repmat(z,numel(t),1);
surf(x,y,z)
xlabel('X')
ylabel('Y')
zlabel('Z')
axis equal



theta=linspace(5/180*pi,43/180*pi,30);
x=-25+24*cos(theta);
y=24*sin(theta);
r=sqrt(x.^2);
t = linspace(0,2*pi,60);
=meshgrid(r,t);
y=repmat(y,60,1);
z=r.*cos(alpha);
x=r.*sin(alpha);
surf(x,y,z)
xlabel('X')
ylabel('Y')
zlabel('Z')
axis equal

scott198510 发表于 2011-12-20 13:42:23

本帖最后由 scott198510 于 2011-12-22 13:18 编辑

梯形棱台的绘制?想把每隔面填充为不同颜色,不知道为什么一直做不到?同时 想把每个面布上网格

a=2;b=10;c1=17;c2=3;
x=[-a -a -b -b; a a b b ;-a a b -b;-a a b -b;-a a a -a; -b b b -b ];
y=;
z=;
C=;
fill3(x,y,z, C)


clc;clear; %这个用patch也没搞定,patch用的不到位
clf reset,k=8;
a=2;b=10;c1=17;c2=3;
X=[-a -a -b -b; a a b b ;-a a b -b;-a a b -b;-a a a -a; -b b b -b ];
Y=;
Z=;
%X Y Z 的每行分别表示各面的四个点的x y z 坐标
FC=k:(k+size(Z,2)-1);
patch(X,Y,Z,FC,'FaceColor','r');
set(gca,'Projection','pers')
view([-20 10]),
colormap(jet),
axis equal off

scott198510 发表于 2011-12-22 13:16:42

本帖最后由 scott198510 于 2011-12-22 16:14 编辑

%还是自己在谢大侠的帮助下搞定:
z = linspace(0.5,1.3,40);    %侧面是梯形
r = 2-z;
t = linspace(0,2*pi,5);
= meshgrid(r,t);
x=r.*cos(theta);
y=r.*sin(theta);
z = repmat(z,numel(t),1);
surf(x,y,z)



z = linspace(0.5,1.3,40);%两腰是曲线,侧面是梯形
r = 0.4.^(2-z);
t = linspace(0,2*pi,5);
= meshgrid(r,t);
x=r.*cos(theta);
y=r.*sin(theta);
z = repmat(z,numel(t),1);


theta=linspace(2/180*pi,43/180*pi,30);   %侧面是曲面梯形
x=-50+48*cos(theta);
y=20*sin(theta);
r=sqrt(x.^2);
t = linspace(0,2*pi,5);
=meshgrid(r,t);
y=repmat(y,5,1);
z=r.*cos(alpha);
x=r.*sin(alpha);
surf(x,y,z)
xlabel('X')
ylabel('Y')
zlabel('Z')
axis equal



liuyalong008 发表于 2011-12-22 18:44:33

scott198510 发表于 2011-12-22 13:16 static/image/common/back.gif
%还是自己在谢大侠的帮助下搞定:
z = linspace(0.5,1.3,40);    %侧面是梯形
r = 2-z;


=meshgrid(-5:.1:5,-5:.1:5,0:.1:5);
v=x.^2/3+y.^2/3-z.^2/4;
p = patch(isosurface(x,y,z,v,1));
isonormals(x,y,z,v,p)
set(p,'FaceColor','red','EdgeColor','none');
daspect()
view(3); axis tight
camlight
lighting gouraud

scott198510 发表于 2011-12-23 11:14:49

本帖最后由 scott198510 于 2011-12-23 11:20 编辑

http://www.ilovematlab.cn/thread-69588-1-1.html 谢老师的多种二次曲面绘制链接


clear,clc,close all;   %马鞍面绘制
t=-3:0.1:3;
=meshgrid(t,t);                      %产生马鞍面x,y数据
z=x.^2-y.^2;                              %产生马鞍面z
=meshgrid(t,-10:0.4:10);         %产生平面数据
%按照y的数据间隔,不停绘制平面。
while 1
    for m=-3:0.5:3;                     %平面y的数据间隔
    y1=m+0*x1;                            %产生与x1,z1相同维数数据
    clf                                 %清除屏幕
    h=surf(x1,y1,z1);                     %绘制平面
    hold on;                              %绘图保持
    surf(x,y,z);                        %绘制马鞍面
    xlabel('x');ylabel('y');zlabel('z');%显示坐标
    set(gcf,'units','normalized','position',); %屏幕最大化
    pause(1);                           %停止1秒时间
    end;                              
end

=meshgrid(linspace(-2,2));%抛物面
x=(y.^2+z.^2)/60;
mesh(x,y,z)



若凡 发表于 2011-12-23 14:50:38

赞!谢谢分享!
页: [1]
查看完整版本: 圆台、棱台、不同回转体的绘制(~~搞定了)