NotOnlyCode / NOC

關於部落格
an open platform for discussing about the generative design on Rhinoceros
  • 4991

    累積人氣

  • 0

    今日人氣

    0

    訂閱人氣

08=Introduction to RhinoScript (Array-1)

        終於,我們要開始介紹 Array,假使能夠把 Array 再搞懂,RhinoScript 中有關VB語言的基本知識就幾乎都說明完畢了。Array 我們可以稱之為陣列,在數學中經常稱為矩陣,基本上 Array 就是將某些資料放入一個集合之中的概念。譬如說,我們都知道一個笛卡爾座標的點可以用 X, Y, Z 軸的座標值來表示,即 Point A (0,0,0),這時候的 (0,0,0) 就是一個 Array。然而,上述的這個 Array 裡頭有三個位置,各自存放著不同的資料。Array 裡頭的資料,我們可以透過 Index 呼叫出來,就此例來說,在RhinoScript中我們應該表示成: Point A = Array(0,0,0),因此,如果我們要得到 Point A 的 X 座標值則會是 Point A (0),依此類推,Point A 的 Y, Z 座標值則為 Point A(1), Point A(2)。
        大家一開始可能會有疑問,為何 Array 中的第一個資料的 Index 為 0?這是VB中的規則,不需要去懷疑也不要問為什麼,只要記住就好,之後有機會的話會慢慢體會到,這樣做有它本身的用意與好處。如果各位過去數學還不差的話,應該對矩陣還有點印象。在數學中,矩陣可以是一維的、二維的(有點像是矩形排列)、三維的(有點像是立方體排列),那可不可能超過三維?當然可能,四維、五維、六維、、、原則上維度是無限的。大家或許會覺得很奇怪,超過三維以上的東西是什麼?要怎麼畫出來?這會牽扯到物理與數學之間的差異,在此不多做詳細解釋,但我們只要簡單地知道數學中的維度不像物理實證一般,它僅是一種資料排列的方式,所以超過三維以上的矩陣是存在的。相同地,在VB中也允許超過三維以上的陣列,不過因為我們畢竟不是真的如同電腦科學的專家寫資料庫,在 RhinoScript 的實際操作中其實使用到五維以上的機會並不多。以下就用一些實例來說明一維、二維及三維陣列的運用:
(1) 1D Array
        Array 的維度表示,放在Array名稱之後的括弧之中,舉例來說:Array A(3) 表示這是個一維的陣列,陣列中有 4 個可以儲存資料的位置;Array B(3,3) 則表示這是個二維的陣列,陣列中有 4*4 = 16 個可以儲存資料的位置;依此類推,其他維度就不再贅述。那麼,在 RhinoScript 中 Array 要如何宣告?試看下列式子:

        Dim A

        A = Array(1, 2, 3, 5, 8, 13, 21, 34, 55)

        這個式子一開始宣告一個變數 A,之後將 A 指定為一個一維的陣列,陣列中含有 9 個資料。這時候,如果我們要印出陣列中的第 5 個資料,那我們要這麼做:

        Call Rhino.Print(A(4))

        奇怪,明明說要印出第 5 個資料,怎麼在陣列中的 Index 卻是放進 4 這個數字?這在一開始我們就說明了,在VB中 Array 的 Index 第一個設定為 0。所以,要找第 5 個資料,其 Index 就會是 4。再試一次,如果我要從這個陣列中印出 21 這個數字,那應該怎麼呼叫?會像是下面的方式:

        Call Rhino.Print(A(6))

        希望透過這樣簡單的例子,各位可以了解到 Array 的資料儲存型態,以及資料的呼叫方式。假使各位還是不理解,姑且就背起來吧!否則,我們就無法進入下一階段的說明。
(2) 2D Array
        在進入二維陣列說明之前,我們先假設已經在 RhinoScript 中製作了一個二維陣列叫做 B,其資料的存放方式如下圖:

這是一個二維的陣列,其資料的儲存型態會有點像是 Excel 中的欄位,所以,如果像圖中所示,我們總共儲存了 16 個資料,維度分別是 4 與 4,B 這個陣列即可以 B(4, 4) 的方式表示。那麼如果我們呼叫 B(0, 1) 就會得到 3,呼叫 B(3, 3) 就會得到 49。相反地,若是我們要得到 25 則要呼叫 B (2, 2)。希望透過這樣的方式,可以讓各位理解 Array 的資料型態與資料排列方式。如果各位還是不清楚,我們在之後的實戰演練中會不斷出現 Array 的應用,到時或許會有更進一步的認識。




        最後,本文將用一個簡單的例子來做 Array, For...Loop, If...Then 的綜合練習。很簡單地,請在 RhinoScript 中 做一個一維陣列,陣列中要依序儲存 1, 2, 3, 4, 5, 6, 7, 8, 9 共九個數值,之後,請利用 For...Loop 與 If...Then 的組合,使 Rhino 印出陣列中的奇數,若為偶數則乘以 2 之後再印出。這個簡單練習的式子如下:

        Sub Main()
          Dim A, i
          A = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
          For i = 0 To 8
            If (A(i) Mod 2 <> 0) Then
              Call Rhino.Print(A(i))
            Else
              Call Rhino.Print(A(i)*2)
            End If
          Next
        End Sub

        Call Main()

         上面這個例子基本上結合了目前已經介紹過的許多VB中的基本知識與功能,如果各位有不懂的地方,請回到之前的文章中尋找答案,本文就不再詳細說明,也算是作為一個小小的自我測試練習。











相簿設定
標籤設定
相簿狀態