基于MATLAB GUI的魔方三维动态还原仿真程序
軟件MATLAB R2019A
1、程序介紹
使用MATLAB GUI功能設計制作一個魔方三維動態還原仿真程序,點擊魔方旋轉按鈕U\D\F\B\L\R旋轉方面相應面,逆\順時針按鈕切換旋轉方向,文字編輯框輸入旋轉步驟如U1B2L3再點擊開始還原按鈕然后魔方開始按步驟還原。
2、畫三維魔方
如何畫魔方的一個色塊?
使用patch()函數。原理:點按順序連成封閉多邊形
point_sequence=[1,2,3,4]; %點連接的順序 square_xyz=[3,1,3;1,1,3;1,-1,3;3,-1,3]; %三維坐標4x3矩陣 patch('Faces',point_sequence,'Vertices',square_xyz,'FaceColor','blue'); axis([-3,3,-3,3,-3,3]);%坐標系范圍 view(3);程序說明:變量point_sequence為行向量,里面元素代表點連接的順序;變量square_xyz為4x3階矩陣,每行代表一個三維坐標;顏色為blue藍色。
如何實現旋轉
使用rotate()函數,命令行輸入help rotate查看用法
>> help rotate rotate - 以指定原點和方向旋轉對象此 MATLAB 函數 將圖形對象 h 旋轉 alpha 度。指定 h 為曲面、補片、線條、文本或圖像對象。direction是一個二元素或三元素向量,它與旋轉軸原點共同確定旋轉軸。旋轉軸的默認原點是圖框中心。該點未必是坐標區的原點。rotate(h,direction,alpha)rotate(...,origin)?注意:向量指向你逆時針旋轉alpha 度,且alpha有正負。
point_sequence=[1,2,3,4]; %點連接的順序 square_xyz=[3,1,3;1,1,3;1,-1,3;3,-1,3]; %三維坐標4x3矩陣 patch_handles=patch('Faces',point_sequence,'Vertices',square_xyz,'FaceColor','blue'); rotate(patch_handles,[1,0,0],90); %旋轉畫色塊程序說明:patch_handles繞向量[1,0,0]逆時針旋轉90讀。
%學習rotate的用法 clc; clear; filename = 'testrotate.gif'; % Specify the output file name global rotate_direction rotate_direction=struct('p_x',[1,0,0],'n_x',[-1,0,0],'p_y',[0,1,0],'n_y',[0,-1,0],'p_z',[0,0,1],'n_z',[0,0,-1]); point_sequence=[1,2,3,4]; %點連接的順序 square_xyz=[3,1,3;1,1,3;1,-1,3;3,-1,3]; %三維坐標4x3矩陣,行向量坐標 per_degree=10; %每次旋轉10° fig=figure; axis([-3,3,-3,3,-3,3]);%坐標系范圍 xlabel('X'); ylabel('Y'); zlabel('Z'); % view(3);%三維視角 view(130,30);%三維視角 patch_handles=patch('Faces',point_sequence,'Vertices',square_xyz,'FaceColor','blue'); for t=1:9rotate(patch_handles,rotate_direction.('p_x'),per_degree); %畫色塊 pause(0.1);%///生成GIF圖drawnowframe = getframe(fig);im{t} = frame2im(frame);[A,map] = rgb2ind(im{t},256); %將 RGB 圖像轉換為索引圖像 A。map 最多包含 n 個顏色。if t == 1imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',0.1);elseimwrite(A,map,filename,'gif','WriteMode','append','DelayTime',0.1);end%/// end程序運行結果:
?
?
3、利用魔方狀態字符串生成魔方
3、1 什么是魔方狀態字符串和解魔方步驟字符串
魔方的6個面及表示
魔方6個面分別用6個大寫英文字母表示,對應顏色可以自己設定。
| 頂面Up | 底面Down | 前面Front | 背面Back | 左面Left | 右面Right |
| U | D | F | B | L | R |
| 白色 | 黃色 | 綠色 | 藍色 | 橙色 | 紅色 |
魔方的中心塊、棱塊和角塊
一個三階魔方可分為三層,頂層、底層和中間層。有六個面,每個面9個色塊,一共54個色塊。總共由26個小方塊組成,根據魔方每個小方塊所處的位置可分為三種小方塊,分別是中心塊、棱塊和角塊。中心塊有6個,每個中心塊上只有一種顏色,只需用一個大寫字母表示,魔方在旋轉過程中中心塊的相對位置都是不會變的。棱塊有12個,棱塊處于每條邊的中間位置,每個棱塊有兩種顏色,用兩個大寫字母表示。角塊有8個,每個角塊3種顏色,用三個大寫字母表示。
魔方狀態字符串
可以用一串大寫英文字母表示一個三階魔方的狀態,一個已經還原好的魔方可以用這樣一串字符表示:UF UR UB UL DF DR DB DL FR FL BR BL UFR URB UBL ULF DRF DFL DLB DBR。
? ? ? ? 這種表示法是由一個叫Mike Reid的魔方愛好者首先使用的,它表示一個已經被解好的魔方。因為六個不同顏色中心塊在任何旋轉過程中相對位置都是不會變的,所以沒有單個字符。這串標準字符中12個雙字符表示魔方的12個棱塊,每個棱塊兩種顏色。8個三字符表示魔方8個角塊,每個角塊三種顏色。對照這個標準字符串,一個打亂的魔方的兩個中心塊所夾的棱塊可以表示出來,三個中心塊所夾的角塊可以表示出來。
cube_right_char=['UF ';'UR ';'UB ';'UL ';'DF ';'DR ';'DB ';'DL ';'FR ';'FL ';'BR ';'BL ';'UFR';'URB';'UBL';'ULF';'DRF';'DFL';'DLB';'DBR'];%正序 cube_error_char=['LU ';'LF ';'UF ';'BD ';'LB ';'RU ';'UB ';'FD ';'BR ';'RF ';'RD ';'DL ';'DBR';'BLU';'BDL';'LFU';'URB';'FLD';'FRU';'DRF'];%亂序?還原好的魔方的正序字符串cube_right_char代表位置,亂序字符串cube_error_char代表對應位置的顏色,如位置'UF'對應的顏色為'LU',即U面和F面所夾棱塊顏色依次為L和U。
解魔方步驟字符串
擰魔方的動作用各個魔方面代表的字符加順時針旋轉的次數表示,如R1表示R面即右面順時針旋轉一次,R2表示R面順時針旋轉兩次,R3代表R面順時針旋轉三次,也即逆時針旋轉1次。
? ? ? ? 解魔方步驟字符串:U1D3F2L3B3F3U1L1D1L2U1F2R3U3B2L2U3F2U1F2L2F2D2L2B2D2L2U2F2U2
?
3、2 如何用魔方狀態字符串生成魔方
以棱塊為例:正序字符串確定棱塊所在位置,亂序字符串確定棱塊顏色。
根據魔方狀態字符串將棱塊和角塊轉化為patch句柄,中心塊也轉化為patch句柄。
patch_handles為26x3階元胞矩陣,1到12行為棱塊,13到20行為角塊,21到26行為中心塊。
global patch_handles %patch對象句柄 patch_handles=cell(26,3); %元胞矩陣,1到12行為棱塊,13到20行為角塊,21到26行為中心塊,4、旋轉魔方的一個面
如何找出需要旋轉的面
根據坐標找面,魔方色塊邊長為2,以魔方中心為原點(0,0,0),以U面為例,U面所在坐標軸為z軸正半軸,3個單位,即找出z=3的色塊就找出棱塊和角塊和中心塊。
5、GUI控件
以U按鈕為例,回調函數為pushbuttonU_callback
pushbuttonU_h = uicontrol('Units','normalized','Position',[button_x,button_y,button_wide,button_high],...'Style','pushbutton','String','U','Callback',@pushbuttonU_callback); function pushbuttonU_callback(src,event) global direction pushbutton_Enable('off'); %使按鈕不可按 rotation_time('U',direction); %旋轉U面,direction=1時逆時針,-1時順時針 pushbutton_Enable('on'); %使按鈕可按 end6、效果
上一篇文章畫動態魔方作為本篇文章的補充
http://t.csdn.cn/LkJEGhttp://t.csdn.cn/LkJEG
程序下載鏈接:
基于MATLABGUI的魔方三維動態還原仿真程序-其他文檔類資源-CSDN下載使用MATLABGUI功能設計制作的一個魔方三維動態還原仿真程序,點擊魔方旋轉按鈕U\\D\\F\\B\\更多下載資源、學習資料請訪問CSDN下載頻道.https://download.csdn.net/download/qq_42053235/85249566
總結
以上是生活随笔為你收集整理的基于MATLAB GUI的魔方三维动态还原仿真程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java--两个巨大素数(质数)的乘积
- 下一篇: 2019校招面经大汇总