在我們已準備好要更深入瞭解如何開發視覺程式時,我們將需要更深入理解將使用的建置區塊。本章提供有關資料的基礎概念 - 透過 Dynamo 程式線路傳遞的物件。
正式的說法是,字串是字元的序列,表示文字常數或某些類型的變數。非正式的說法是,字串是文字式的程式設計行話。我們曾使用數字 (整數與小數) 來驅動參數,現在使用文字也可以做到這一點。
字串可以用於多種應用,包括定義自訂參數、註解文件集,以及剖析文字式資料集。字串節點位於 Core > Input 。
以上範例節點是字串。數字可以表示為字串、字母或文字陣列。
按一下下方的連結下載範例檔案。
附錄中提供範例檔案的完整清單。
透過查詢字串,您可以快速剖析大量資料。我們將討論一些基本作業,這些作業可以加快工作流程,有助於提高軟體互通性。
以下影像將考慮來自外部工作表的資料字串。該字串表示 XY 平面內某矩形的頂點。接下來在小練習中詳細瞭解某些字串分割作業:
「;」分隔符號分隔矩形的每個頂點。這會建立清單,每個頂點有 3 個項目。
透過按一下節點中部的「+」,可以建立新分隔符號。
在圖元區加入「,」字串,並插入新的分隔符號輸入。
現在結果將產生含十個項目的清單。節點會先根據 separator0 進行分割,然後根據 separator1 進行分割。
雖然以上項目清單可能看起來像數字,但是在 Dynamo 中,仍將其視為單獨的字串。若要建立點,需要將其資料類型從字串轉換為數字。我們使用 String.ToNumber 節點來達成
本節點非常簡單。將 String.Split 的結果插入輸入。輸出看上去似乎相同,但現在資料類型是 number 而不是 string。
透過其他某些基本作業,我們現在已根據原始字串輸入,在原點繪製了三角形。
由於字串是一般文字物件,因此可以適用於多種應用。接下來我們看一下在 Dynamo 的 Core > String 中的一些主要動作:
這種方法可以按順序合併兩個字串。它會提取清單中的每個文字字串,然後建立一個合併後的字串。
以下表示連接三個字串:
按一下節點中心的「+/-」按鈕,可以加上或減去連接的字串。
輸出是一個連接後的字串,其中包括空格與標點。
接合方法非常類似於連接,只是會加入標點。
如果您曾使用 Excel,可能會遇到 CSV 檔案。CSV 表示以逗號分隔的值。可以使用逗號 (或此案例中的兩條虛線) 做為分隔符號搭配 String.Join 節點,以建立類似的資料結構。
以下影像表示接合兩個字串:
藉由分隔符號輸入,可以建立對接合後的字串進行分割的字串。
在此練習中,我們將使用字串的查詢與操控方法解構 Robert Frost 的 Stopping By Woods on a Snowy Evening 的最後一節。這並不是字串最實用的應用,但將其套用至清晰的節奏與韻律時,將有助於我們掌握概念字串的動作。
接下來從這一節的基本字串分割開始。首先,我們注意到書寫格式的依據是逗號。我們將使用此格式將每行分隔為個別項目。
將基準字串貼至 String 節點。
另一個 String 節點用來表示分隔符號。在此案例中,我們將使用逗號。
將 String.Split 節點加入圖元區,並連接至兩個字串。
輸出顯示我們現在已將各行分隔為個別元素。
現在,我們來到詩詞美妙的部分:最後兩行。原始的一節是一個資料項目。在第一步,我們已將此資料分隔為個別項目。現在,我們需要搜尋要尋找的文字。雖然我們 可以 透過選取清單中的最後兩個項目來實現這一點,但是如果是整本書,我們不希望通讀所有內容然後手動隔離元素。
我們不是手動搜尋,而是使用 String.Contains 節點對一組字元執行搜尋。這類似於文字處理器中的「尋找」指令。在此案例中,會傳回「true」,若項目中找到該子字串,會傳回「false」。
在 searchFor 輸入中,我們會定義將在該節中尋找的子字串。接下來使用 String 節點搭配文字「And miles」。
輸出是 false 與 true 的清單。在下一步中,我們使用此布林邏輯對元素進行篩選。
我們將使用 List.FilterByBoolMask 節點篩選出 false 與 true。「in」輸出會傳回「遮罩」輸入為「true」的陳述式,而「out」輸出會傳回「遮罩」輸入為「false」的陳述式。
「in」的輸出與預期相同,是該節詩句的最後兩行。
現在,我們希望合併這兩行,以重複這節詩句。檢視上一步的輸出時,我們注意有清單中有兩個項目:
透過兩個 List.GetItemAtIndex 節點,我們可以使用值 0 與 1 做為索引輸入以隔離項目。
每個節點的輸出依序提供最後兩行。
為了將這兩個項目合併為一個,我們使用 String.Join 節點:
加入 String.Join 節點後,我們注意到需要分隔符號。
為了建立分隔符號,我們在圖元區加入 String 節點,然後鍵入逗號。
最終的輸出已將最後兩個項目合併為一個。
這看起來似乎要執行很多工作才能隔離最後兩行,的確,字串作業通常需要某些前置工作。但這些作業可擴充,而且可以相對輕鬆地套用至大型資料集。如果您以參數方式使用工作表與互通性,請確保考慮到字串作業。
藉由邏輯,或者更明確地說,藉由條件邏輯,我們可以根據測試指定單一或一組動作。在評估測試時,我們可以使用表示 True
或 False
的布林值控制程式流程。
數值變數可以儲存所有範圍的不同數字。布林變數只能儲存兩個值,稱為 True 或 False、是或否、0 或 1。由於布林值範圍有限,因此很少使用布林值執行計算。
「If」陳述式是程式設計中的關鍵概念:「如果 這 是真的,則會發生 那件事,否則會發生 其他事。」陳述式所產生的動作由布林值驅動。在 Dynamo 中,可以採用多種方式定義「if」陳述式:
圖示 | 名稱 (語法) | 輸入 | 輸出 |
---|
接下來瞭解使用條件「if」陳述式的三種有效節點中每種節點的簡單範例。
在此影像中,boolean 設為 true,這意味著結果是字串 「this is the result if true」。建立 If 陳述式的三個節點在這裡的工作方式完全相同。
再說一次,節點的工作方式完全相同。若 boolean 變更為 false,則結果是數字 Pi,如原始 If 陳述式所定義。
在下方的連結按一下,下載範例檔案。
附錄中提供完整的範例檔案清單。
接下來使用邏輯將數字清單分隔為偶數清單與奇數清單。
a.Number Range - 在圖元區加入一個數字範圍。
b.Numbers - 在圖元區加入三個數字節點。每個數字節點的值應為:0.0 (start)、10.0 (end) 與 1.0 (step)。
c.輸出 - 輸出是一個 11 個數字 (從 0 到 10) 的清單。
d.模除 (%)- 將 Number Range 連接至 x,將 2.0 連接至 y。這會計算清單中的每個數字除以 2 產生的餘數。此清單的輸出是 0 與 1 交替顯示的數值清單。
e.相等性測試 (==) - 在圖元區加入相等性測試。將 模除 輸出插入 x 輸入,將 0.0 插入 y 輸入。
f.Watch - 相等性測試的輸出是 true 與 false 交替顯示的清單。這些值用於分隔清單中的項目。0 (或 true) 表示偶數,1 (或 false) 表示奇數。
g.List.FilterByBoolMask - 此節點將根據輸入的布林值,將這些值篩選到兩個不同清單中。將原始的 Number Range 插入 list 輸入,將 相等性測試 輸出插入 mask 輸入。輸出 in 表示 true 值,而輸出 out 表示 false 值。
h.Watch - 結果是我們現在產生了偶數清單與奇數清單。我們已使用邏輯運算子將清單分隔為多種樣式!
接下來我們將建置第一個練習中建立的邏輯,將此設置套用到塑型作業中。
2.我們從上一個練習開始,採用相同的節點。唯一的例外 (除了變更格式) 是:
a.使用 Sequence 節點搭配這些輸入值。
b.我們取消插入 List.FilterByBoolMask 的 list 輸入。暫時將這些節點放在一旁,這在稍後的練習中會有用。
3.我們先為圖表建立不同群組,如以上影像所示。此節點群組表示定義曲線所用的參數式方程式。一些註記如下:
a.第一個 Number Slider 表示波浪的頻率,最小值為 1,最大值為 4,步長為 0.01。
b.第二個 Number Slider 表示波浪的振幅,最小值為 0,最大值為 1,步長為 0.01。
c.PolyCurve.ByPoints - 若複製以上節點圖,在 Dynamo 預覽視埠中的結果將是一條正弦曲線。
此處採用的輸入方式:對比較靜態的性質使用數字節點,對比較彈性的性質使用數字滑棒。我們希望保留在這一步開始時定義的原始數字範圍。但是,我們在此建立的正弦曲線應具有某些彈性。我們可以移動這些滑棒以觀看曲線對其頻率與振幅的更新。
4.我們將對定義進行一些調整,因此接下來看一下最終結果,以便可以參考得到的結果。之前,前兩個步驟是分別執行的,現在我們要連接兩者。我們將使用基準正弦曲線以驅動拉鍊元件的位置,並使用 true/false 邏輯實現大小方塊的交替變化。
a.Math.RemapRange - 接下來使用步驟 02 中建立的數字序列,透過重新對映範圍建立新的數字系列。步驟 01 的原始數字介於 0-100 之間。這些數字的範圍分別由 newMin 與 newMax 輸入限制為從 0 到 1。
5.建立 Curve.PointAtParameter 節點,然後連接步驟 04 的 Math.RemapRange 輸出做為其 param 輸入。
此步驟將沿曲線建立點。我們將數字重新對映到從 0 至 1 的範圍,因為 param 的輸入會尋找此範圍內的值。0 值表示起點,1 值表示終點。這當中的所有數字都會在 [0,1] 範圍內運算。
6.將 Curve.PointAtParameter 的輸出連接至 List.FilterByBoolMask,以分隔奇數和偶數索引的清單。
a.List.FilterByBoolMask - 將上一步的 Curve.PointAtParameter 插入 list 輸入。
b.Watch - in 的 Watch 節點與 out 的 Watch 節點顯示我們有兩個分別代表偶數索引與奇數索引的清單。這些點按照在曲線上的位置順序排序,我們將在下一步示範。
7.接下來,我們將使用步驟 05 中 List.FilterByBoolMask 的輸出結果,根據其索引產生不同大小的幾何圖形。
Cuboid.ByLengths - 重新建立以上影像顯示的連接,以產生一條沿正弦曲線的拉鍊。立方體在這裡只是方塊,我們將根據方塊中心的曲線點定義其大小。現在,模型中應該已清晰呈現偶數/奇數的區分邏輯。
a.偶數索引處的立方體清單。
b.奇數索引處的立方體清單。
瞧!您剛剛根據本練習示範的邏輯作業,以程式設計了定義幾何圖形維度的過程。
資料是程式的內容。它會通過線路向節點提供輸入,並在節點中經過處理變為新形式的輸出資料。接下來我們將檢閱資料的定義、構建方式,並開始在 Dynamo 中使用資料。
資料是一組定性或定量變數的值。資料最簡單的形式是數字,例如 0
、3.14
或 17
。但是資料也有許多不同類型:表示變動數字的變數 (height
)、字元 (myName
)、幾何圖形 (Circle
),或資料項目的清單 (1,2,3,5,8,13,...
)。
在 Dynamo 中,我們將資料加入/饋入節點的輸入埠 - 我們可以有資料而不採取動作,但必須有資料才能處理節點所代表的動作。將節點加入工作區後,如果未提供任何輸入,則結果將是函數,而不是動作本身的結果。
簡單資料
資料與動作 (節點) 已成功執行
無資料輸入的動作 (節點) 將傳回一般函數
注意空值 'null'
類型表示沒有資料。雖然這是抽象概念,但是您在使用視覺程式設計時可能已瞭解這一點。若某動作無法建立有效的結果,該節點會傳回空值。
測試空值及移除資料結構中的空值是建立功能強大的程式至關重要的構成部分。
執行視覺程式設計時,會很快產生大量資料,需要對其階層採用某種管理方式。承擔此角色的是資料結構,即我們儲存資料所採用的組織配置。資料結構的詳細資料及使用方法視程式設計語言而不同。
在 Dynamo 中,我們透過清單將階層加入至資料。我們將在後續章節中深入探索這一功能,不過接下來先從簡單的內容開始:
清單代表一種資料結構中放置的一系列項目:
我的手 (清單) 有五根手指 (項目)。
我所在的街道 (清單) 有十棟房子 (項目)。
Number Sequence 節點使用 start、amount 及 step 輸入來定義數字清單。使用這些節點,我們已建立兩個包含十個數字的獨立清單,其中一個清單的範圍是 100-109,另一個的範圍是 0-9。
List.GetItemAtIndex 節點會以特定的索引選取清單中的項目。若選擇 0,即可取得清單中的第一個項目 (在此案例中是 100)。
對第二個清單套用相同的程序,取得值 0,即清單中的第一個項目。
現在,我們使用 List.Create 節點將兩個清單合二為一。請注意,節點會建立 清單的清單。這會變更資料結構。
再次使用 List.GetItemAtIndex 時,將索引設定為 0,即可取得清單之清單中的第一個清單。這意味著將清單視為項目,這與其他指令碼撰寫語言略有不同。在稍後的章節中,我們將透過清單操控與資料結構取得更進階的結果。
理解 Dynamo 中資料階層的關鍵概念:對資料結構而言,會將清單視為項目。換言之,Dynamo 採用由上而下的程序瞭解資料結構。這意味著什麼?接下來我們舉例說明。
按一下下方的連結下載範例檔案。
附錄中提供範例檔案的完整清單。
在這第一個範例中,我們將組裝薄殼圓柱,這將使用我們在本節中討論的幾何圖形階層。
1. 加入 Point.ByCoordinates - 在圖元區加入節點後,我們會在 Dynamo 預覽格線的原點看到某個點。x、y 與 z 輸入的預設值是 0.0,給我們此位置的點。
2.Plane.ByOriginNormal - 幾何圖形階層的下一步是平面。有數種方式可以建構平面,我們將使用原點與法線作為輸入。原點是上一步驟中建立的點節點。
Vector.ZAxis - 這是 z 方向的單位化向量。請注意,沒有輸入,只有值為 [0,0,1] 的向量。我們將此用作 Plane.ByOriginNormal 節點的 normal 輸入。這會在 Dynamo 預覽中產生矩形平面。
3.Circle.ByPlaneRadius - 接下來是階層,現在我們使用上一步驟中建立的平面來建立曲線。插入節點後,我們得到一個位於原點的圓。節點的預設半徑值為 1。
4.Curve.Extrude - 現在我們指定深度與第三個延伸方向,讓其成為比較常見的形狀。此節點將以擠出方式根據曲線建立曲面。節點上的預設距離為 1,我們應該會在視埠中看到圓柱。
5.Surface.Thicken - 此節點會將曲面偏移指定的距離並封閉外形,以產生封閉實體。預設厚度值為 1,我們應該會在視埠中看到符合這些值的薄殼圓柱。
6.Number Slider - 我們接下來不使用所有這些輸入的預設值,而是對模型加入一些參數式控制。
Domain Edit - 在圖元區加入數字滑棒後,按一下左上方的脫字字元以顯示範圍選項。
Min/Max/Step - 分別將 min、max 與 step 值變更為 0、2 與 0.01。我們這樣做是為了控制整體幾何圖形的大小。
7.Number Sliders - 在所有的預設輸入中,我們多次複製並貼上此數字滑棒 (選取滑棒,按一下 Ctrl+C,然後按一下 Ctrl+V),直到具有預設值的所有輸入都改用滑棒為止。某些滑棒值必須大於零,以便讓定義生效 (例如:若要增厚曲面,需要有擠出深度)。
8.現在我們已使用這些滑棒建立參數式薄殼圓柱。嘗試調整其中某些參數,即可在 Dynamo 視埠中看到幾何圖形的動態更新。
Number Sliders - 在此基礎上更進一步,我們在圖元區上加入了許多滑棒,並需要清理剛剛建立的工具介面。在滑棒上按一下右鍵,選取「更名...」,然後變更每個滑棒的名稱以適當描述其參數 (厚度、半徑、高度等等)。
9.現在,我們已建立良好的增厚圓柱。這目前只是一個物件,接下來我們瞭解如何建立保持動態連結的一系列圓柱。為了實現這一點,我們將建立圓柱清單,而不是使用單一項目。
加 (+) - 我們的目標是在已建立的圓柱旁,加入一列圓柱。若要在與目前圓柱相鄰的位置加入一個圓柱,需要考慮圓柱的半徑以及薄殼的厚度。我們將滑棒的兩個值相加,即可得到此數值。
10.此步驟較複雜,接下來我們慢慢完成:最終目標是建立數字清單,這些數字會定義圓柱列中每個圓柱的位置。
a.乘 - 首先,我們要將上一步驟中的值乘以 2。上一步驟中的值表示半徑,我們要將圓柱移動完整直徑的距離。
b.Number Sequence - 我們使用此節點建立一系列數字。乘 節點的第一個輸入是上一步驟中的 step 值。可以使用 Number 節點將 start 值設定為 0.0。
c.Integer Slider - 對於 amount 值,我們連接整數滑棒。這會定義所建立圓柱的數量。
d.輸出 - 此清單會顯示每個圓柱在陣列中的移動距離,並由原始滑棒進行參數式驅動。
11.此步驟足夠簡單 - 將上一步驟中定義的序列插入原始 Point.ByCoordinates 的 x 輸入。這將取代我們可以刪除的 pointX 滑棒。現在,我們將在視埠中看到一系列圓柱 (請確保整數滑棒大於 0)。
12.圓柱鏈仍動態連結至所有滑棒。調整每個滑棒可以查看定義更新!
對於營造引人注目的視覺效果以及彩現視覺程式輸出的差異而言,顏色是很棒的資料類型。使用抽象資料及不同的數字時,有時很難查看變更的項目與變更程度。顏色在這裡大有用武之地。
在 Dynamo 中使用 ARGB 輸入建立顏色。這對應於 Alpha、紅色、綠色與藍色通道。Alpha 代表顏色的 透明度,而其他三項用作主要顏色以協同產生顏色的整個光譜。
圖示 | 名稱 (語法) | 輸入 | 輸出 |
---|
以下表格中的顏色會查詢用於定義顏色的性質:Alpha、紅色、綠色與藍色。請注意,Color.Components 節點會提供所有四項作為不同輸出,因此該節點更適合查詢顏色的性質。
圖示 | 名稱 (語法) | 輸入 | 輸出 |
---|
以下表格中的顏色對應於 HSB 顏色空間。將顏色分為色相、飽和度與亮度可以更直觀地解譯顏色:顏色應該是怎樣的?顏色是什麼色彩?顏色的明暗程度應該是怎樣的?這是分別劃分的色相、飽和度與亮度。
圖示 | 名稱 (語法) | 輸入 | 輸出 |
---|
顏色範圍類似於練習的 Remap Range 節點:可將數字清單重新對映到其他範圍。但它並非對映到 數字 範圍,而是根據介於 0 至 1 的輸入數字對映到 顏色漸層。
目前的節點運作正常,但第一次就要讓所有內容正常運作可能會有些困難。熟悉顏色漸層的最佳方式是以互動方式對其進行測試。接下來我們進行快速練習,以檢閱如何設置輸出顏色對應於數字的漸層。
定義三種顏色:使用 Code Block 節點,透過插入 0 與 255 的適當組合來定義 red、green 與 blue。
建立清單: 將三種顏色合併到一個清單中。
定義索引:建立清單以定義每種顏色的掣點位置 (從 0 至 1)。請注意值 0.75 為綠色。這會在顏色範圍滑棒上,將綠色置於水平漸層長度的 3/4 處。
Code Block:要轉換為顏色的輸入值 (介於 0 至 1 之間)。
使用 Display.ByGeometry 節點可以在 Dynamo 視埠中查看顏色幾何圖形。這有助於區分不同類型的幾何圖形、展示參數式概念,或定義模擬的分析圖例。輸入很簡單:幾何圖形與顏色。若要建立類似上面影像的漸層,請將顏色輸入連接至 Color Range 節點。
透過 Display.BySurfaceColors 節點,我們可以使用顏色對映整個曲面上的資料!此功能帶來某些振奮人心的可能性,可以對透過離散分析 (例如日光、能源及鄰近) 取得的資料進行視覺化。在 Dynamo 中將顏色套用至曲面類似於在其他 CAD 環境中將材質套用至材料。接下來在以下簡短練習中示範如何使用此工具。
按一下下方的連結下載範例檔案。
附錄中提供完整的範例檔案清單。
本練習的內容主要是以參數式方法控制顏色及幾何圖形。幾何圖形是一個基本螺旋線,我們下面使用 Code Block 定義。這是快速輕鬆的參數式函數建立方式,由於我們的焦點是顏色 (而不是幾何圖形),因此我們使用程式碼區塊高效建立螺旋線,而不贅述圖元區。隨著手冊改用更先進的材料,我們將更頻繁地使用程式碼區塊。
Code Block: 定義包含上述公式的兩個程式碼區塊。這是快速建立螺旋線的參數式方法。
Point.ByCoordinates:將程式碼區塊的三項輸出插入節點的座標。
現在我們可以看到建立螺旋線的一系列點。下一步是建立通過這些點的曲線,以便能看到螺旋。
PolyCurve.ByPoints: 將 Point.ByCoordinates 輸出連接至節點的 points 輸入。我們會得到一條螺旋曲線。
Curve.PointAtParameter: 將 PolyCurve.ByPoints 輸出連接至 curve 輸入。此步驟的目的是建立沿曲線滑動的參數式牽引點。由於曲線透過參數對點進行演算,因此我們需要輸入 0 與 1 之間的 param 值。
Number Slider: 加入圖元區後,將 min 值變更為 0.0,max 值變更為 1.0,step 值變更為 0.01。將滑棒輸出插入 Curve.PointAtParameter 的 param 輸入。現在,我們將看到沿螺旋線的長度由滑棒的百分比表示的點 (0 表示起點,1 表示終點)。
建立參考點後,現在我們比較從參考點到螺旋原始定義點的距離。此距離值將驅動幾何圖形與顏色。
Geometry.DistanceTo: 將 Curve.PointAtParameter 輸出連接至 輸入。將 Point.ByCoordinates 連接至 geometry 輸入。
Watch: 產生的結果將顯示從每個螺旋點至曲線上參考點之距離的清單。
下一步驟是使用從螺旋點至參考點之距離的清單來驅動參數。我們將使用這些距離值來定義曲線上一系列圓球的半徑。若要讓圓球保持合適的大小,我們需要 重新對映 距離值。
Math.RemapRange: 將 Geometry.DistanceTo 輸出連接至數字輸入。
Code Block: 將值為 0.01 的程式碼區塊連接至 newMin 輸入,將值為 1 的程式碼區塊連接至 newMax 輸入。
Watch: 將 Math.RemapRange 輸出連接至一個節點,將 Geometry.DistanceTo 輸出連接至另一個節點。比較結果。
此步驟已將距離清單重新對映到較小的範圍。我們可以採用合適的任何方式編輯 newMin 與 newMax 值。這些值將重新對映,並在整個範圍內具有相同的 分配比率
Sphere.ByCenterPointRadius: 將 Math.RemapRange 輸出連接至 radius 輸入,將原始 Point.ByCoordinates 輸出連接至 centerPoint 輸入。
變更數字滑棒的值,查看圓球大小更新。我們現在有一個參數式波浪
圓球的大小展示出由曲線上的參考點定義的參數式陣列。接下來我們應用相同的概念,使用圓球半徑來驅動其顏色。
Color Range: 加入圖元區頂部。懸停在 value 輸入上時,我們會注意到要求的數字介於 0 與 1 之間。我們需要重新對映 Geometry.DistanceTo 輸出中的數字,以便其與此範圍相容。
Sphere.ByCenterPointRadius: 我們暫時停用此節點的預覽 (按一下右鍵 >「預覽」)
Math.RemapRange: 此程序似乎應該很熟悉。將 Geometry.DistanceTo 輸出連接至數字輸入。
Code Block: 與之前的步驟類似,為 newMin 輸入建立值 0,為 newMax 輸入建立值 1。請注意,在此案例中,我們可以從一個程式碼區塊定義兩個輸出。
Color Range: 將 Math.RemapRange 輸出連接至 value 輸入。
Color.ByARGB: 這是我們為了建立兩種顏色將執行的作業。雖然此程序可能貌似有些難,但是它與其他軟體中的 RGB 顏色相同,我們只是剛剛使用視覺程式設計來執行此作業而已。
Code Block: 建立 0 與 255 兩個值。將兩個輸出插入與以上影像相同的兩個 Color.ByARGB 輸入 (或建立您最愛的兩種顏色)。
Color Range:colors 輸入要求提供顏色清單。我們需要使用上一步驟中建立的兩種顏色建立此清單。
List.Create: 將兩種顏色合併到一個清單中。將輸出插入 Color Range 的 colors 輸入。
Display.ByGeometryColor: 將 Sphere.ByCenterPointRadius 連接至 geometry 輸入,將 Color Range 連接至 color 輸入。現在,我們已在整個曲線範圍內建立平滑的漸層。
如果我們變更之前定義中 Number Slider 的值,顏色與大小就會更新。在此案例中,顏色與半徑大小直接相關:我們現在已在兩個參數之間建立視覺連結!
按一下下方的連結下載範例檔案。
附錄中提供完整的範例檔案清單。
首先,我們需要建立 (或參考) 將用作 Display.BySurfaceColors 節點輸入的曲面。在此範例中,我們將在正弦及餘弦曲線之間進行斷面混成。
此節點群組將沿 Z 軸建立點,然後根據正弦及餘弦函數將其取代。然後,使用兩點清單產生 NURBS 曲線。
Surface.ByLoft:在清單的 NURBS 曲線之間產生內插曲面。
File Path:選取將針對下游像素資料進行取樣的影像檔案
使用 File.FromPath 將檔案路徑轉換為檔案,然後傳送至 Image.ReadFromFile 以輸出供取樣的影像
Image.Pixels:輸入影像,並提供沿影像的 x 和 y 維度將使用的取樣值。
滑棒:提供 Image.Pixels 的取樣值
Display.BySurfaceColors:分別沿 X 與 Y 軸在整個曲面內對映一系列顏色值
取樣解析度為 400x300 之輸出曲面的特寫預覽
圖示 | 名稱/語法 | 輸入 | 輸出 |
---|
Object.IsNull | obj | 布林 |
ARGB 顏色 (Color.ByARGB) | A、R、G、B | color |
Alpha (Color.Alpha) | color | A |
紅色 (Color.Red) | color | R |
綠色 (Color.Green) | color | G |
藍色 (Color.Blue) | color | B |
組成 (Color.Components) | color | A、R、G、B |
色相 (Color.Hue) | color | 色相 |
飽和度 (Color.Saturation) | color | 飽和度 |
亮度 (Color.Brightness) | color | 亮度 |
If (If) | test、true、false | result |
Formula (IF(x,y,z)) | x、y、z | result |
Code Block ((x?y:z);) | x? y, z | result |
如果資料最簡單的形式是數字,則關聯這些數字最簡單的方式就是透過數學運算。從諸如除號等簡單運算子到三角函數,再到更複雜的公式,數學是開始探索數字關係與樣式的良好方式。
運算子是一組元件 (加、減、乘、除等),使用代數函數與兩個數字輸入值,產生一個輸出值。在「運算子」>「動作」下可以找到這些運算子。
圖示 | 名稱 (語法) | 輸入 | 輸出 |
---|---|---|---|
按一下下方的連結下載範例檔案。
附錄中提供完整的範例檔案清單。
透過公式結合運算子和變數,以構成更複雜的關係。使用滑棒建立可透過輸入參數控制的公式。
1. 建立表示參數式方程式中「t」的數字序列,因此,我們希望使用大到足以定義螺旋線的清單。
Number Sequence: 根據以下三項輸入定義數字序列:start、amount 與 step。
2.上述步驟已建立用於定義參數範圍的數字清單。接下來,建立表示黃金螺旋線方程式的節點群組。
定義黃金螺旋線的方程式如下:
以下影像以視覺程式設計形式表示黃金螺旋線。逐步檢查節點群組時,請盡可能注意視覺程式與書寫方程式之間的對應。
a.Number Slider:在圖元區加入兩個數字滑棒。這些滑棒代表參數式方程式中的 a 與 b 變數。這些表示彈性的常數,或表示我們可以針對所需結果進行調整的參數。
b.相乘 (*):相乘節點由星號表示。我們會重複使用此符號連接相乘的變數
c.Math.RadiansToDegrees:「t」值需要轉換為度,才能在三角函數中演算。請記住,Dynamo 預設使用度來運算這些函數。
d.Math.Pow:以「t」與數字「e」表示的函數,此函數會建立 Fibonacci 序列。
e.Math.Cos 與 Math.Sin:這兩個三角函數將分別區分每個參數式點的 X 座標與 Y 座標。
f.Watch:現在可以看到輸出是兩個清單,分別是產生螺旋線所用點的 x 與 y 座標。
現在,上一步的眾多節點都沒問題,但工作量很大。若要建立更有效率的工作流程,請參閱 DesignScript 將 Dynamo 表示式的字串定義為一個節點。在接下來的一系列步驟中,我們將瞭解使用參數式方程式來繪製 Fibonacci 螺旋線。
Point.ByCoordinates: 將上方的相乘節點連接到「x」輸入,將下方的節點連接到「y」輸入。我們現在可以在螢幕上看到點的參數式螺旋線。
Polycurve.ByPoints: 將上一步的 Point.ByCoordinates 連接到 points。我們可以保留 connectLastToFirst 無輸入,因為不打算繪製封閉曲線。這會建立一條穿過上一步定義的每個點的螺旋線。
我們現在完成了 Fibonacci 螺旋線!接下來進一步將此分為兩個單獨的練習,我們分別稱之為鸚鵡螺與向日葵。這些是自然系統的抽象名稱,但可以充分呈現 Fibonacci 螺旋線的兩種不同應用。
Circle.ByCenterPointRadius: 我們在此處將使用圓節點,採用與上一步相同的輸入。半徑的預設值為 1.0,所以我們可以立即看到輸出的圓。它會立即清晰展示點如何進一步偏離原點。
Number Sequence: 這是「t」的原始陣列。將此序列插入 Circle.ByCenterPointRadius 的半徑值後,圓心仍會離原點越來越遠,但半徑會增加,因而產生很酷的 Fibonacci 圓形。
如果您使用 3D 製作會更酷!
現在我們已經建立圓形的鸚鵡螺殼,接下來使用參數式格線。我們將對 Fibonacci 螺旋線使用基本旋轉,以建立 Fibonacci 格線,並在向日葵種子長大後對結果進行塑型。
一開始,我們先執行上一個練習中的相同步驟:使用 Point.ByCoordinates 節點建立點的螺旋線陣列。
![](../images/5-3/2/math-part IV-01.jpg)
接下來,依照這些小步驟,以各種旋轉產生一系列螺旋線。
a.Geometry.Rotate: 有幾個 Geometry.Rotate 選項,請確保選擇以 geometry、basePlane 和 degrees 為輸入的節點。將 Point.ByCoordinates 連接至 geometry 輸入。在此節點上按一下右鍵,並確保將交織設定為「笛卡兒積」
b.Plane.XY: 連接至 basePlane 輸入。我們將繞原點旋轉,此原點的位置與螺旋線的基準位置相同。
c.Number Range: 對於角度輸入,我們希望建立多個旋轉。使用 Number Range 元件可以快速達成。將其連接至 degrees 輸入。
d.Number: 為了定義數字範圍,在圖元區以垂直順序加入三個數字節點。從上到下分別指定值為 0.0、360.0 與 120.0。這些值將驅動螺旋線旋轉。請注意將三個數字節點連接至 Number Range 節點後的輸出結果。
輸出開始形成一個漩渦。接下來調整某些 Number Range 參數,並查看結果的變化。
將 Number Range 節點的步長大小從 120.0 變更為 36.0。請注意,這會建立更多旋轉,因此會產生更密的格線。
將 Number Range 節點的步長大小從 36.0 變更為 3.6。現在,這會產生密度大得多的格線,螺旋線的方向性變得不清楚。各位,我們產生了一朵向日葵。
加 (+)
var[]...[]、var[]...[]
var[]...[]
減 (-)
var[]...[]、var[]...[]
var[]...[]
乘 (*)
var[]...[]、var[]...[]
var[]...[]
除 (/)
var[]...[]、var[]...[]
var[]...[]