# 視覺程式設計和 Dynamo

#### 什麼是視覺程式設計？ <a href="#what-is-visual-programming" id="what-is-visual-programming"></a>

設計經常會涉及在設計的各環節之間建立視覺、系統或幾何關係。大多數狀況下，這些關係由工作流程制定，這些工作流程會透過規則方式讓我們完成從概念到結果的流程。您可能不知道，我們以演算法方式工作，會定義遵循輸入、處理與輸出基本邏輯的一組逐步動作。藉由程式設計，我們可以繼續使用此方式，但要對演算法進行形式化。

#### 現有的演算法 <a href="#algorithms-in-hand" id="algorithms-in-hand"></a>

雖然**演算法**提供一些強大的機會，但這個詞也可能會帶來一些錯誤觀念。演算法可以產生非預期、瘋狂或很酷的結果，但並非無所不能。實際上，演算法本身很普通。接下來我們使用紙鶴的實際範例進行說明。我們先使用一張方形紙 (輸入)，然後按照一系列折紙步驟 (處理動作)，最後折成紙鶴 (輸出)。

![紙鶴](https://primer.dynamobim.org/01_Introduction/images/1-1/00-OrigamiCrane.png)

演算法在哪裡？演算法是一組抽象步驟，可以採用一系列方式 (文字或圖形) 來表示。

**文字說明：**

1. 先使用一張方形紙，有顏色的一面朝上。對折然後展開。然後沿另一方向對折。
2. 將紙翻轉到白色的一面。對折，折好後展開，然後再次沿另一方向對折。
3. 使用已產生的折痕，將模型頂部的 3 個角向下折至底部的角。展平模型。
4. 將頂部的三角形片折至中心，然後展開。
5. 將模型頂部向下折，折好後展開。
6. 展開模型最上方的片，將其向上折，同時向內按壓模型的兩側。展平，折好。
7. 翻轉模型，在另一面重複步驟 4-6。
8. 將頂部的片折至中心。
9. 在另一面重複上述步驟。
10. 向上折疊模型的兩條「腿」，折好然後展開。
11. 沿剛剛產生的折痕對「腿」進行內側反向折疊。
12. 對一面進行內側反向折疊以產生頭，然後向下折疊翅膀。
13. 現在紙鶴就折好了。

**圖形說明：**

![紙鶴說明](https://primer.dynamobim.org/01_Introduction/images/1-1/01-OrigamiCraneInstructions.png)

#### 定義的程式設計 <a href="#programming-defined" id="programming-defined"></a>

使用其中任何一組說明應該都會折成紙鶴，如果您讓自己按照說明，就是套用了一個演算法。唯一的差異在於，我們閱讀了該組說明的形式進行的方式，這也導致我們進行了**程式設計**。程式設計常用作\_電腦程式設計\_的簡稱，是將一系列動作形式化並處理為可執行程式的反應。如果我們將上述折紙鶴的說明轉化為電腦可以閱讀並執行的格式，就是在進行「程式設計」。

程式設計的關鍵與第一個障礙，是我們必須依賴某些抽象形式與電腦進行有效通訊。這需要採用多種形式的程式設計語言 (例如 JavaScript、Python 或 C)。如果我們能寫出一組可重複的說明 (例如紙鶴折疊說明)，只需針對電腦轉換說明即可。我們的電腦將會折疊紙鶴，甚至會折疊彼此略有不同的多種紙鶴。這是程式設計的力量所在，電腦將重複執行我們為其指定的任何單一工作或一組工作，而不會延遲或出現人為錯誤。

**定義的視覺程式設計**

> 按一下下方的連結下載範例檔案。
>
> 附錄中提供範例檔案的完整清單。

{% file src="<https://1226582865-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmuqshfgEG0ZvIFN5DRfA%2Fuploads%2Fgit-blob-4579b65294b6edd879b7c8445c1d8b383f58876c%2FVisual%20Programming%20-%20Circle%20Through%20Point.dyn?alt=media>" %}

如果您承擔的工作是編寫紙鶴折疊說明，您會如何執行？您要使用圖形、文字或兩者的組合來編寫嗎？

若您的回答包含圖形，則**視覺程式設計**毫無疑問適合您。不論是程式設計還是視覺程式設計，過程在本質上是相同的。它們會利用相同的形式化架構，但是，我們會透過圖形 (即「視覺」) 使用者介面定義程式的說明與關係。我們不是鍵入受語法約束的文字，而是將預先封裝的節點連接在一起。以下是相同演算法 (繪製一個通過某點的圓) 的比較，分別使用節點與程式碼進行程式設計：

**視覺程式：**

!

**文字程式：**

```
myPoint = Point.ByCoordinates(0.0,0.0,0.0);
x = 5.6;
y = 11.5;
attractorPoint = Point.ByCoordinates(x,y,0.0);
dist = myPoint.DistanceTo(attractorPoint);
myCircle = Circle.ByCenterPointRadius(myPoint,dist);
```

我們的演算法結果：

!

採用視覺特性進行程式設計的方式，可減少入門以及與設計人員頻繁溝通的障礙。Dynamo 是視覺程式設計的範例，但我們稍後將看到，在設計應用程式時仍可使用文字程式設計方式。
