发布网友 发布时间:2022-04-25 15:09
共1个回答
热心网友 时间:2023-10-11 06:36
function fifg=figure('name','FlipIt!','numbertitle','off','menubar','none');m=nan;while ~(m>0&&n>0&&m==round(m)&&n==round(n)) ipt=inputdlg({'请输入行数:','请输入列数:'},'FlipIt!',1,{'5','5'}); if isempty(ipt) continue; else m=str2num(ipt{1});n=str2num(ipt{2}); endendAA=zeros(m,n);wt=.8*n/max([m,n]);ht=.8*m/max([m,n]);axes('position',[.5-wt/2,.5-ht/2,wt,ht],'xtick',0:n,'ytick',0:m,'color','none','xticklabel',[],'yticklabel',[],'zticklabel',[],'gridlinestyle','-','box','on');grid on;axis equal;axis([0,n,0,m]);[x,y,z]=sphere(21);A=[0 0 1;0 -1 0;1 0 0]*[x(:),y(:),z(:)]'/2.5;x=reshape(A(1,:),22,[]);y=reshape(A(2,:),22,[]);z=reshape(A(3,:),22,[]);h=zeros(m,n);hold onfor i=1:n for j=1:m h(i,j)=surf(x+i-.5,y+j-.5,z);set(h(i,j),'AmbientStrength',1); endendshading interp;light('position',[1 1 1],'Style','infinite');lighting gouraudset(fg,'windowbuttondownfcn',{@wbd h},'userdata',{AA AA});uicontrol( 'String', '我投降了,告诉我怎么做!','fontsize',12,'Position', [10 5 200 25],'Callback',{@ft fg h});uicontrol( 'String', '再来一盘,我来上瘾了!','fontsize',12,'Position', [220 5 200 25],'Callback',@ag);az=linspace(180,0,50);el=linspace(-90,90,50);for i=1:50 view(az(i),el(i));pause(0.02);endtitle('把所有的球都反过来!');function wbd(src,eventdata,h)p=get(gca,'currentpoint');p=ceil(p(1,1:2));mi=get(gca,'xlim');mi=mi(2);mj=get(gca,'ylim');mj=mj(2);ii=p(1);jj=p(2);if ii<=0||jjmi||jj>mj return;endA=get(src,'userdata');B=A{2};A=A{1};A(jj,ii)=~A(jj,ii);for i=1:11; for j=-1:1 try c=get(h(ii+j,jj),'cdata'); set(h(ii+j,jj),'cdata',[c(:,2:end),c(:,1)]); B(jj,ii+j)=~B(jj,ii+j); end end for j=[-1 1] try c=get(h(ii,jj+j),'cdata'); set(h(ii,jj+j),'cdata',[c(:,2:end),c(:,1)]); B(jj+j,ii)=~B(jj+j,ii); end end pause(0.02);endset(src,'userdata',{A,B});if all(B) msgbox('你真聪明!','恭喜!');endfunction ag(obj,eventdata)close;fi;function ft(obj,eventdata,f,h)title('计算中,请等待...');pause(0.02)A=get(f,'userdata');A0=A{2};[m,n]=size(A0);At=ones(m,n);b=reshape(xor(A0,At),[],1);A=[];for j=1:n for i=1:m bs=zeros(m+2,n+2);bs(i+1,j:j+2)=1; bs(i:i+2,j+1)=1;bs=bs(2:m+1,2:n+1); A=[A,bs(:)]; endendAb=[A,b];k=1;zy=[];for j=1:m*n+1 i=find(Ab(k:end,j),1)+k-1; if ~isempty(i) Ab([k,i],:)=Ab([i,k],:);zy=[zy,j]; Ab(k+1:end,j:end)=xor(Ab(k+1:end,j:end),repmat(Ab(k,j:end),m*n-k,1)&repmat(Ab(k+1:end,j),1,m*n-j+2)); k=k+1; endendif zy(end)==m*n+1 disp('无解!');return;endi=length(zy);for j=fliplr(zy) Ab(1:i-1,j:end)=xor(Ab(1:i-1,j:end),repmat(Ab(i,j:end),i-1,1)&repmat(Ab(1:i-1,j),1,m*n-j+2)); i=i-1;endx=zeros(m*n,1);x(zy)=Ab(1:length(zy),end);B=reshape(x,m,n);title('演示中,请仔细看,不要乱按鼠标。')for ii=1:n for jj=1:m if(B(jj,ii)) for t=1:11; for j=-1:1 try c=get(h(ii+j,jj),'cdata'); set(h(ii+j,jj),'cdata',[c(:,2:end),c(:,1)]); end end for j=[-1 1] try c=get(h(ii,jj+j),'cdata'); set(h(ii,jj+j),'cdata',[c(:,2:end),c(:,1)]); end end pause(0.02); end pause(0.2); end endendtitle('演示完毕。爽吧!')