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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

css3魔方3乘3每层旋转_MATLAB画图技巧:让魔方转起来!

發布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 css3魔方3乘3每层旋转_MATLAB画图技巧:让魔方转起来! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文主要用來炫技......涉及圖形對象的平移與旋轉。

如果只是畫一個靜態的魔方,必然是很簡單的,6個不同顏色的面,中間加上若干條線就OK了。但我想實現的是一個真正的能夠轉的魔方,就要從最基礎的小立方體開始搭起來了。

1.搭建一個基本立方體

主要思路是,用fill3函數畫一個面,然后用transform對象將其變換到相應的位置。6個不同顏色的面,就構成了一個小立方體。

%% 在指定的父級對象(Parent)下創建一個立方體 % Parent可以是Axes、Group或Transform對象 function Parent = makeCube(Parent) x = [0 0 1 1]; y = [0 1 1 0]; z = [0 0 0 0]; c = colormap(jet(6)); h = gobjects(1,6); t = gobjects(1,6); for ii = 1:6t(ii) = hgtransform('Parent',Parent);h(ii) = fill3(x,y,z,c(ii,:),'Parent',t(ii),'LineWidth',2); end t(2).Matrix = makehgtform('xrotate',pi/2); t(3).Matrix = makehgtform('yrotate',-pi/2); t(4).Matrix = makehgtform('translate',[0,1,0],'xrotate',-pi/2,'translate',[0,-1,0]); t(5).Matrix = makehgtform('translate',[1,0,0],'yrotate',pi/2,'translate',[-1,0,0]); t(6).Matrix = makehgtform('translate',[0,0,1]); end

大致介紹下涉及的函數。

  • colormap: 從預定義的顏色空間選擇若干個顏色。
  • gobjects: 創建一個圖形對象數組,用于預定義。
  • hgtransform:新建Transform對象。
  • makehgtform:設置Transform對象的變換矩陣。

2.利用基本立方體構建一個N階魔方

這個相對簡單些,for循環調用上面的小立方體生成函數,用Transform對象將其平移到相應的位置就可以了。注意讓x,y,z軸位于面的中心位置。

function t = magicCube(N) h = gobjects(N,N,N); t = gobjects(N,N,N); for x = 1:Nfor y = 1:Nfor z = 1:Nt(x,y,z) = hgtransform('Parent',gca);h(x,y,z) = makeCube(t(x,y,z));t(x,y,z).Matrix = makehgtform('translate',[x-1-N/2,y-1-N/2,z-1-N/2]);endend end end

調用一下,看看3階魔方的效果。

N = 3; figure() ax = gca; ax.Box = 'off'; axis(ax,'equal','off'); ax.Projection = 'perspective'; t = magicCube(N);

注意: 當魔方的階數較大(N>9)時,生成魔方的函數magicCube會明顯變慢,解決方法是內部的立方體可以不用畫,只需要外部的就可以了。具體的代碼就不寫了。

本文的題圖為一個21階魔方,(目前量產的最高階魔方為17階,所以,你可以用MATLAB玩到更高階的魔方)

3.讓魔方轉起來!

X軸方向旋轉:

%% X軸方向第idx層逆時針旋轉90度. function t = rotateX(t,idx) N = length(t); Rx = makehgtform('xrotate',pi/2);%,'translate',[0,0,-1]); for y = 1:Nfor z = 1:Nt(idx,y,z).Matrix = Rx*t(idx,y,z).Matrix;end end t(idx,:,:) = rot90(squeeze(t(idx,:,:))); end

Y軸方向旋轉:

%% Y軸方向第idx層逆時針旋轉90度. function t = rotateY(t,idx) N = length(t); Ry = makehgtform('yrotate',pi/2); for x = 1:Nfor z = 1:Nt(x,idx,z).Matrix = Ry*t(x,idx,z).Matrix;end end t(:,idx,:) = rot90(squeeze(t(:,idx,:)),3); end

Z軸方向旋轉:

%% Z軸方向第idx層逆時針旋轉90度 function t = rotateZ(t,idx) N = length(t); Rz = makehgtform('zrotate',pi/2); for x = 1:Nfor y = 1:Nt(x,y,idx).Matrix = Rz*t(x,y,idx).Matrix;end7 end t(:,:,idx) = rot90(squeeze(t(:,:,idx))); end

現在,可以開始玩魔方了!!!

當然,由于沒有做圖形界面,只能以寫代碼的形式來玩。函數都在上面寫好了,具體怎么調用的我就不寫了。

下面是我用上述程序做的一些魔方圖案。

動圖,9階魔方的打亂與還原

經典的七階6面心形圖案。

最后是專欄目錄:

易夕:MATLAB Tricks 專欄目錄?zhuanlan.zhihu.com

總結

以上是生活随笔為你收集整理的css3魔方3乘3每层旋转_MATLAB画图技巧:让魔方转起来!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。