2010年6月23日 星期三

SuperMario hit the RecursiveBricks ( RhinoScript )




撰寫RhinoScript程式
製作出3D Recursive遞歸的Boxes
與2D不同的是
x,y,z三向度要分別定義
才可確認位置
We use the RhinoScript to program
3D recursive Boxes



並利用Addbox功能繪出
只需在Addbox後方括弧內
輸入方形八個角的座標位置即可
Insert eight variables to the
Addbox function to create boxes

程式碼如下:
若執行上有問題
請先將中文刪除再執行
Program as following:


Sub CreBox(x,y,z,l,n)

Dim a,b,c,d,e,f,g,h,box,s
s=10/9 
'下一層縮小比例之倒數 改變此數即可改變方盒比例
'change the number of s could change the scale for the next layer 

a = Array(x-l/s,y-l/s,z-l/s)
b = Array(x-l/s,y+l/s,z-l/s)
c = Array(x+l/s,y+l/s,z-l/s)
d = Array(x+l/s,y-l/s,z-l/s)
e = Array(x-l/s,y-l/s,z+l/s)
f = Array(x-l/s,y+l/s,z+l/s)
g = Array(x+l/s,y+l/s,z+l/s)
h = Array(x+l/s,y-l/s,z+l/s)
'定義由原點向八方伸展出去的八個點
'define the eight points spreading out from the zero

box= Array(a,b,c,d,e,f,g,h)
'宣告一個array 將八個點的數字存入
'declare a array to storage the value of the eight points
Rhino.AddBox(box)
'畫方盒子 draw boxes



If n>0 Then
'開始進行RECURSIVE 遞歸 start the recursive
d= (1/s)*(l/2)
'下一層方盒之邊長 the length of the boxes in the next layer 
CreBox x+l/s+d/s,y+l/s+d/s,z+l/s+d/s,d,n-1
CreBox x+l/s+d/s,y-l/s-d/s,z+l/s+d/s,d,n-1
CreBox x-l/s-d/s,y+l/s+d/s,z+l/s+d/s,d,n-1
CreBox x-l/s-d/s,y-l/s-d/s,z+l/s+d/s,d,n-1
CreBox x+l/s+d/s,y+l/s+d/s,z-l/s-d/s,d,n-1
CreBox x+l/s+d/s,y-l/s-d/s,z-l/s-d/s,d,n-1
CreBox x-l/s-d/s,y+l/s+d/s,z-l/s-d/s,d,n-1
CreBox x-l/s-d/s,y-l/s-d/s,z-l/s-d/s,d,n-1

End If

End Sub

CreBox 0,0,0,10,3
'執行程式 run the program

試著改變方盒的形狀
DONE!!!


沒有留言:

張貼留言