1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > MATLAB版本万圣节南瓜灯二创(方便diy版)

MATLAB版本万圣节南瓜灯二创(方便diy版)

时间:2020-07-21 20:15:59

相关推荐

MATLAB版本万圣节南瓜灯二创(方便diy版)

为了方便大家对南瓜灯进行不同表情绘制,这里搞了个更方便diy的版本

使用方式就是先点击figure2(黑白图的那个窗口),上下左右键移动红叉,空格键绘制黑点或白点(将南瓜雕刻或修补),南瓜的曲面会同步调整,数据也会被同步存到mask.mat,下次打开还是你创作的样子。

若是想恢复基础版本,只需要删除mask.mat文件即可。

以下是完整代码:

function pumpkinSLclc;clear;% 构造网格[t,p]=meshgrid(linspace(0,2*pi,200),linspace(0,pi-.05,200));% 二元分段函数foutline=@(t,p)(p<=.14).*90.*cos(7.*p)+(p>.14).*(cos(20.*t)+70).*(p.*(pi-p+.1)).^.2;mask=ones(size(t));[maskX,maskY]=meshgrid(1:size(t,1),1:size(t,2));% 画个嘴巴mask(maskX>50&maskX<100&maskY>130&maskY<140)=nan;% 矩形眼睛mask(maskX>45&maskX<65&maskY>90&maskY<100)=nan;mask(maskX>85&maskX<105&maskY>90&maskY<100)=nan;% 三角形眼睛% mask(maskX>45&maskX<70&maskY>90&maskY<100)=nan;% mask(maskX>80&maskX<105&maskY>90&maskY<100)=nan;% mask(maskX>45&maskX<70&maskY>90&maskY<100&(maskX-maskY>-35))=1;% mask(maskX>45&maskX<70&maskY>90&maskY<100&(maskX-maskY(end:-1:1,:)<-55))=1;% mask(maskX>80&maskX<105&maskY>90&maskY<100&(maskX-maskY>5))=1;% mask(maskX>80&maskX<105&maskY>90&maskY<100&(maskX-maskY(end:-1:1,:)<-15))=1;if ~exist('mask.mat')save mask.mat mask;elsemask=load('mask.mat');mask=mask.mask;end% 球面坐标转化为X,Y,Zh=cos(p).*foutline(t,p);Ro=sin(p).*foutline(t,p);R=Ro.*mask;X=cos(t).*R;Y=sin(t).*R;% 颜色矩阵构造CMap=ones([size(t),3]);tMap=ones(size(t));c1=[253,158,3]./255;c2=[76,103,86]./255;for i=1:3tMap(:,:)=c1(i);tMap(p<=.14)=c2(i);CMap(:,:,i)=tMap;endfig1=figure();ax1=gca;ppkHdl=surf(ax1,X,Y,h,'CData',CMap,'EdgeColor',[0,0,0],'EdgeAlpha',.2);hold(ax1,'on')ax1.Color=[0 0 0];% 绘制一个小一圈的南瓜头假装光源h=cos(p).*foutline(t,p).*0.95;R=sin(p).*foutline(t,p).*0.95;X=cos(t).*R;Y=sin(t).*R;surf(ax1,X,Y,h,'FaceColor',[248,240,186]./255,'EdgeColor','none')ax1.View=[-137.3000 13.9844];fig2=figure();ax2=gca;hold(ax2,'on')axis equalax2.XLim=[0,201];ax2.YLim=[0 201];ax2.YDir='reverse';[x,y]=find(isnan(mask));surfHdl=scatter(ax2,y,x,5,'s','filled','CData',[0 0 0]);position=[100,100];posHdl=scatter(ax2,position(1,1),position(1,2),150,'rx');set(fig2,'KeyPressFcn', @key)function key(~,event)switch event.Keycase 'uparrow'position=position+[0,-1];case 'downarrow'position=position+[0,1];case 'leftarrow'position=position+[-1,0];case 'rightarrow'position=position+[1,0]; case 'c'position=[0,0];case 'space'if isnan(mask(position(1,2),position(1,1)))mask(position(1,2),position(1,1))=1;elsemask(position(1,2),position(1,1))=nan;end[x,y]=find(isnan(mask));surfHdl.XData=y;surfHdl.YData=x;R=Ro.*mask;X=cos(t).*R;Y=sin(t).*R;ppkHdl.XData=X;ppkHdl.YData=Y;save mask.mat mask;endposition(position<1)=1;position(position>200)=200;posHdl.XData=position(1,1);posHdl.YData=position(1,2);endend

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。