[問題] 繞兩軸旋轉

看板Mathematica作者 (Hysterisis)時間10年前 (2014/05/16 03:54), 10年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
自從上次數方塊遊戲之後就在想花樣 例如說使方塊在空間中自動旋轉,同時要求計數(邪惡貌) 那就要要生成適合計算的隨機方塊陣形 我採用的方法是以 {0,0,0} 為中心 向六個方向 dir= {{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}}; 隨機往外生出新方塊 == == 總之,代碼如下 == == <下載: https://db.tt/pz06VBBg 偽‧大分子產生器 > Clear["Global`*"]; adjLimit = 4; (*設定方塊彼此間能多擁擠*) dir = {{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}}; pos = pos2 = {{0,0,0}} adj[x_] := Cases[pos, _?(EuclideanDistance[x, #] == 1 &)]; (*找出某方塊x--可以不在pos中--的周圍已有哪些方塊。配合Length使用*) (*放個Dynamic,可以實時觀賞方塊冒出來,很賞心悅目*) Dynamic[Graphics3D[ {Hue[1.*#2/4 + 0.1], (* /4代表會有4種顏色, +0.1是在微調色調,有點隨意 *) Cuboid[#1 - {0.5, 0.5, 0.5} - Mean[pos]]} & @@@ (*將圖形調整至原點重心*) MapThread[List, {pos, Range[Length@pos]}], (*這裡只是想讓依序產生出來的方塊能在四種顏色之間循環,得以區別。 可設3,5以上眼花花*) Axes -> False, Boxed -> False, Lighting-> {{"Ambient", White}}, (*此項參數讓方塊旋轉時色調不會有陰影變化*) SphericalRegion -> True (*此項使周邊留足夠空白,怎麼旋轉都不會被切邊*) ]] (*實際產生新方塊*) Do[out = Catch[ While[True, stem = RandomChoice[pos2]; (*pos2是尚未達到與3個方塊相鄰者*) rnd = stem + RandomChoice[dir]; (*取一dir*) adj1 = Length@adj[rnd]; (*和rnd相鄰*) adj2 = Length /@ (adj /@ adj[rnd]); (*和rnd相鄰的相鄰數*) If[! MemberQ[pos, rnd] && adj1 <= adjLimit && Max@adj2 <= adjLimit - 1, Throw[rnd]]; ]]; (*用意是方塊太擠很難計算,adjLimit= 3 or 4,設為5形狀笨拙,6等於沒設, 2只可能變成長蛇狀 ^o^ *) (*Throw + Catch 配合無窮迴圈或須窮舉時的複雜、巢狀迴圈非常好用, 雖然這在其他語言是很異類的寫法。似乎是記憶體管理上會有問題... 我不是很懂。*) AppendTo[pos, out]; If[adj1 <= adjLimit - 1(*還可以再分出*), AppendTo[pos2, out]]; pos2 = Complement[pos2, Cases[Intersection[pos2, adj[rnd]], _?(Length@adj[#] >= adjLimit &)]]; (*pos2的存在是要削減選擇跟比較的空間,做到加速*) ,{59} (*目標方塊數-1*) ]; 到此為止都頗有心得。 不過,我想請教的問題是,我不知道怎麼利用 ViewPoint 參數,就像 ViewPoint的說明文件中應用範例那樣,使得圖形旋轉! 而且與範例不同的是,我必須使圖形同時對兩個軸旋轉(像電影世界末日那顆隕石) 因為這樣才能看清楚所有角度。 ^^^^^^ 我用了RotationTransform,目前好像是卡在旋轉不可交換,用兩個相垂直的軸同時 旋轉,只會得到古怪的jiggle效果。 拜託給建議了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.213.88 ※ 文章網址: http://www.ptt.cc/bbs/Mathematica/M.1400183665.A.CA1.html Edit: 加速,除Bug, 此版程式碼可以在合理時間內給出400個方塊。每個至多與3/4個方塊相鄰。 雖然這麼多方塊已經不是初衷~~ 感覺產生出不是DLA,卻像DLA的特殊隨機形狀了! ※ 編輯: jurian0101 (140.112.213.88), 05/16/2014 20:34:54 ※ 編輯: jurian0101 (140.112.213.88), 05/16/2014 21:43:55
文章代碼(AID): #1JTHjnoX (Mathematica)
文章代碼(AID): #1JTHjnoX (Mathematica)