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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值