# 視覺程式設計和 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 是視覺程式設計的範例，但我們稍後將看到，在設計應用程式時仍可使用文字程式設計方式。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://primer2.dynamobim.org/zh-tw/a_appendix/a-1_visual-programming-and-dynamo.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
