圆台、棱台、不同回转体的绘制(~~搞定了)
本帖最后由 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-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-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 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
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: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)
赞!谢谢分享!
页:
[1]