www.gusucode.com > 三维模仿源码程序 > 三维模仿源码程序/MathRubik2/showsol.m
function showsol(Cube,varargin) %showsol - Shows the solution hAxes=FindRubikAxes; if nargin<1|isempty(Cube) Cube=FindRubikCube; elseif ischar(Cube) switch Cube case 'key' switch get(gcf,'CurrentCharacter') case {'n',' '} ShowTurn(hAxes,1) case 'N' ShowTurn(hAxes,1,-1) case 'p' ShowTurn(hAxes,-1) case 'P' ShowTurn(hAxes,-1,-1) case 's' ShowTurn(hAxes,-Inf) case 'S' ShowTurn(hAxes,-Inf,-1) case 'T' ShowTurn(hAxes,-Inf,0) case 'e' ShowTurn(hAxes,Inf) case 'E' ShowTurn(hAxes,Inf,-1) case 'F' ShowTurn(hAxes,Inf,0) case 'X' StopShow(hAxes,Cube) end case 'next' ShowTurn(hAxes,1) case 'back' ShowTurn(hAxes,-1) case 'backall' ShowTurn(hAxes,-Inf) case 'stop' StopShow(hAxes,Cube) end return end % Startup settings Cube.iSol=0; ShowTitle(hAxes,Cube) set(hAxes,'UserData',Cube) set(gcf,'KeyPressFcn','showsol key') function StopShow(hAxes,Cube) Cube.sol=[]; set(hAxes,'UserData',Cube) set(get(hAxes,'Parent'),'KeyPressFcn','') ShowTitle(hAxes,Cube); function ShowTurn(hAxes,dx,Anim) if nargin<3 Anim=1; end Cube=get(hAxes,'UserData'); i=Cube.iSol; n=size(Cube.sol,1); while dx&i<=n if dx>0 i=i+1; if i>n i=n; break; end sol=Cube.sol(i,:); dx=dx-1; else % dx<0 if i<1 break; end sol=Cube.sol(i,:); if sol(2)<2 sol(2)=-sol(2); end i=i-1; dx=dx+1; end Cube=RotateLayer(sol,Anim,hAxes,Cube); if Anim axes(hAxes) ShowTitle(hAxes,Cube,i) drawnow end end Cube.iSol=i; set(hAxes,'UserData',Cube) if Anim==0 PlotCube(hAxes,Cube); end ShowTitle(hAxes,Cube)