日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于MATLAB GUI的魔方三维动态还原仿真程序

發(fā)布時間:2023/12/8 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于MATLAB GUI的魔方三维动态还原仿真程序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

軟件MATLAB R2019A

1、程序介紹

使用MATLAB GUI功能設(shè)計制作一個魔方三維動態(tài)還原仿真程序,點擊魔方旋轉(zhuǎn)按鈕U\D\F\B\L\R旋轉(zhuǎn)方面相應(yīng)面,逆\順時針按鈕切換旋轉(zhuǎn)方向,文字編輯框輸入旋轉(zhuǎn)步驟如U1B2L3再點擊開始還原按鈕然后魔方開始按步驟還原。

2、畫三維魔方

如何畫魔方的一個色塊?

使用patch()函數(shù)。原理:點按順序連成封閉多邊形

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藍色。

如何實現(xiàn)旋轉(zhuǎn)

使用rotate()函數(shù),命令行輸入help rotate查看用法

>> help rotate rotate - 以指定原點和方向旋轉(zhuǎn)對象此 MATLAB 函數(shù) 將圖形對象 h 旋轉(zhuǎn) alpha 度。指定 h 為曲面、補片、線條、文本或圖像對象。direction是一個二元素或三元素向量,它與旋轉(zhuǎn)軸原點共同確定旋轉(zhuǎn)軸。旋轉(zhuǎn)軸的默認原點是圖框中心。該點未必是坐標區(qū)的原點。rotate(h,direction,alpha)rotate(...,origin)

?注意:向量指向你逆時針旋轉(zhuǎn)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); %旋轉(zhuǎn)畫色塊

程序說明:patch_handles繞向量[1,0,0]逆時針旋轉(zhuǎn)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; %每次旋轉(zhuǎn)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 圖像轉(zhuǎn)換為索引圖像 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

程序運行結(jié)果:

?

?

3、利用魔方狀態(tài)字符串生成魔方

3、1 什么是魔方狀態(tài)字符串和解魔方步驟字符串

魔方的6個面及表示

魔方6個面分別用6個大寫英文字母表示,對應(yīng)顏色可以自己設(shè)定。

魔方六個面對應(yīng)的大寫英文字母及顏色

頂面Up

底面Down

前面Front

背面Back

左面Left

右面Right

UDFBLR
白色黃色綠色藍色橙色紅色

魔方的中心塊、棱塊和角塊

一個三階魔方可分為三層,頂層、底層和中間層。有六個面,每個面9個色塊,一共54個色塊??偣灿?6個小方塊組成,根據(jù)魔方每個小方塊所處的位置可分為三種小方塊,分別是中心塊、棱塊和角塊。中心塊有6個,每個中心塊上只有一種顏色,只需用一個大寫字母表示,魔方在旋轉(zhuǎn)過程中中心塊的相對位置都是不會變的。棱塊有12個,棱塊處于每條邊的中間位置,每個棱塊有兩種顏色,用兩個大寫字母表示。角塊有8個,每個角塊3種顏色,用三個大寫字母表示。

魔方狀態(tài)字符串

可以用一串大寫英文字母表示一個三階魔方的狀態(tài),一個已經(jīng)還原好的魔方可以用這樣一串字符表示:UF UR UB UL DF DR DB DL FR FL BR BL UFR URB UBL ULF DRF DFL DLB DBR。

? ? ? ? 這種表示法是由一個叫Mike Reid的魔方愛好者首先使用的,它表示一個已經(jīng)被解好的魔方。因為六個不同顏色中心塊在任何旋轉(zhuǎn)過程中相對位置都是不會變的,所以沒有單個字符。這串標準字符中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代表對應(yīng)位置的顏色,如位置'UF'對應(yīng)的顏色為'LU',即U面和F面所夾棱塊顏色依次為L和U。

解魔方步驟字符串

擰魔方的動作用各個魔方面代表的字符加順時針旋轉(zhuǎn)的次數(shù)表示,如R1表示R面即右面順時針旋轉(zhuǎn)一次,R2表示R面順時針旋轉(zhuǎn)兩次,R3代表R面順時針旋轉(zhuǎn)三次,也即逆時針旋轉(zhuǎn)1次。

? ? ? ? 解魔方步驟字符串:U1D3F2L3B3F3U1L1D1L2U1F2R3U3B2L2U3F2U1F2L2F2D2L2B2D2L2U2F2U2
?

3、2 如何用魔方狀態(tài)字符串生成魔方

以棱塊為例:正序字符串確定棱塊所在位置,亂序字符串確定棱塊顏色。

根據(jù)魔方狀態(tài)字符串將棱塊和角塊轉(zhuǎn)化為patch句柄,中心塊也轉(zhuǎn)化為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、旋轉(zhuǎn)魔方的一個面

如何找出需要旋轉(zhuǎn)的面

根據(jù)坐標找面,魔方色塊邊長為2,以魔方中心為原點(0,0,0),以U面為例,U面所在坐標軸為z軸正半軸,3個單位,即找出z=3的色塊就找出棱塊和角塊和中心塊。

5、GUI控件

以U按鈕為例,回調(diào)函數(shù)為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); %旋轉(zhuǎn)U面,direction=1時逆時針,-1時順時針 pushbutton_Enable('on'); %使按鈕可按 end

6、效果

上一篇文章畫動態(tài)魔方作為本篇文章的補充

http://t.csdn.cn/LkJEGhttp://t.csdn.cn/LkJEG

程序下載鏈接:

基于MATLABGUI的魔方三維動態(tài)還原仿真程序-其他文檔類資源-CSDN下載使用MATLABGUI功能設(shè)計制作的一個魔方三維動態(tài)還原仿真程序,點擊魔方旋轉(zhuǎn)按鈕U\\D\\F\\B\\更多下載資源、學習資料請訪問CSDN下載頻道.https://download.csdn.net/download/qq_42053235/85249566

總結(jié)

以上是生活随笔為你收集整理的基于MATLAB GUI的魔方三维动态还原仿真程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。