[問題] 繞兩軸旋轉
自從上次數方塊遊戲之後就在想花樣
例如說使方塊在空間中自動旋轉,同時要求計數(邪惡貌)
那就要要生成適合計算的隨機方塊陣形
我採用的方法是以 {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
Mathematica 近期熱門文章
PTT數位生活區 即時熱門文章