作业帮 > 综合 > 作业

哪位大神告诉我用matlab画透明立体球的程序

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/04/30 09:08:20
哪位大神告诉我用matlab画透明立体球的程序
要透明的,最好还能有一块去掉 然后用不同的颜色表示 ,就如同一个西瓜切掉了一块(冰激凌形状),还有最好不要显示那些黑色的边
哪位大神告诉我用matlab画透明立体球的程序
是这个意思吗,切掉一块
r=linspace(0,1,11);
t=linspace(0,pi*4,73);
p=linspace(0,pi,19);
[r,t,p]=meshgrid(r,t,p);
x=r.*sin(p).*cos(t);
y=r.*sin(p).*sin(t);
z=r.*cos(p);
c=cat(4,r-0.5,pi/6-p);
[f,v]=isosurface(x,y,z,max(c,[],4),0);
h=patch('Faces',f,'Vertices',v,'edgecolor','none','cdata',sqrt(v(:,1).^2+v(:,2).^2+v(:,3).^2),'facecolor','y')
cc=cat(4,r-0.5,p-pi/6);
[ff,vv]=isosurface(x,y,z,max(cc,[],4),0);
vv(:,3)=vv(:,3)+0.1;
hh=patch('Faces',ff,'Vertices',vv,'edgecolor','none','cdata',sqrt(vv(:,1).^2+vv(:,2).^2+vv(:,3).^2),'facecolor','b')
axis equal off
alpha .2
view(3)
camlight
lighting gouraud
再问: 好厉害!不过我想要的就是那一块用不同的颜色标出就行,不用让他脱离原来的球体。因为我想在大球旁边放一个小球体,然后那个小球体会发出一束光照在大球上,而大球上不同颜色的那块就是被小球体照射到的地方。嘿嘿 能不能帮我编一下啊?
再答: 这样可以了吧 t=linspace(0,pi*2,37); p=linspace(0,pi,19); [t,p]=meshgrid(t,p); r=1; x=r.*sin(p).*cos(t); y=r.*sin(p).*sin(t); z=r.*cos(p); zz=z;zzz=z; zz(ppi/6)=nan; surf(x,y,zz,'facecolor',[.7 .7 0],'edgecolor','none'); hold on surf(x,y,zzz,'facecolor',[1 1 0],'edgecolor','none'); camlight;lighting gouraud;alpha .5;axis equal
再问: 您好,您答案我很满意,但是难得碰到高手,所以我就贪心一下,能不能再帮我编个程序。现在那个大球已经有阴影部分了 能不能在大球的旁边(两球的距离小于大球的半径),把小球也画出来,然后小球上发出的一束光线也画出来正好照到大球的阴影部分···若是两幅图拼接一块也行,因为本人实在很菜,希望高手能帮忙。
再答: t=linspace(0,pi*2,37); p=linspace(0,pi,19); [t,p]=meshgrid(t,p); x=sin(p).*cos(t); y=sin(p).*sin(t); z=cos(p); zz=z;zzz=z; zz(ppi/6)=nan; h=surf(x,y,zz,'facecolor',[.7 .7 0],'edgecolor','none','facealpha',.5); hold on surf(x,y,zzz,'facecolor',[1 1 0],'edgecolor','none','facealpha',.5); a=sqrt(3)/2+1/2/tan(pi/12); b=a-a/cos(pi/12)^2+2/cos(pi/12)^2; r=(a/cos(pi/12)^2-2/cos(pi/12)^2)*sin(pi/12); x=r.*x; y=r.*y; z=r.*z+b; surf(x,y,z,'facecolor',[1 1 0],'edgecolor','none','facealpha',.8,'AmbientStrength',.8); h=linspace(a-2,1/2/tan(pi/12),7); t=linspace(0,pi*2,37); [t,h]=meshgrid(t,h); r=h.*tan(pi/12); x=r.*cos(t); y=r.*sin(t); z=a-h; surf(x,y,z,'facecolor',[1 1 0],'edgecolor','none','alphadata',0.5-abs(z-1.5),'facealpha','interp','AmbientStrength',1,'DiffuseStrength',0,'SpecularStrength',0); light('Position',[0 0 b],'Style','infinite'); lighting gouraud;axis equal off