Dynamo應有秘籍:4:確保首末數據封閉的序列

在Code Block中,我們可以使用快捷方式構建在一定區間的數字列表,也有幾種簡單的表達格式,也是在日常編程中最常用的:

a..ba..b..ca..b..#ca..#b..c

這裡要特別說明一下a..b..c這個格式。在這裡A與B是數字範圍的兩個邊界,C是間隔一般的理解上,形成的數列應該是類似於{A,X1,X2…B}這樣的列表。但有時候Dynamo給出結果的最後元素卻不是B,而是一個比B小一些的數字。下面我們可以先用幾個簡單的數字來示意:

1..20..3 返回 {1,4,7,10,13,16,19}5..100..15 返回 {5,20,35,50,65,80,95}

可以看到結果序列的最後的數字並不是我們指定邊界數字,這也很好理解,因為間距不是整除數,最後的邊界數字是不滿足遞增條件的。

但是很明顯,我們設定邊界數據是有需要的,有時候是需要達到邊界數字的,做到這樣就有幾個方法:

  1. 確保間距為整除後數字,這很容易理解

  2. 使用#直接指定等分數目,由程序去自行計算間距這兩種情況下,都需要我們對已有的ABC數字先進行一定的運算,再修改其值來構造序列,這也是比較符合日常邏輯的方式。

但其實Design Script是比較智能的程序,有一個特殊的符號可以幫助我們省卻這些枯燥的運算過程,僅僅使用已知的ABC本身就構造出符合要求(末位數字為B)的序列。這個符號就是「~」。

我們只需要將a..b..c改寫成a..b..~c,就可以會生成{A,X1,X2…B},保證AB分別為列表的首末元素,即使C並不是整除間距。因為如果C不是能整除的間距,我們就需要進行X=(B-A)/C這樣的運算得到份數,但是這個份數是小數,需要進行取整Y=Math.Floor(X),之後再使用Y構件數列a..b..#Y。

依然用之前的例子,我們可以看一下增加「~」控制符後,數據的結果有何不同:

有的時候,在精度範圍內,可能我們使用a..b..~c+0.1或者a..b..~c-0.1,都可以得到與a..b..~c同樣的結果。這在我們對一條曲線按照需要的長度進行等分時非常有幫助,因為曲線的長度可能是變化的非整數,直接使用「~」將省去大量的數學計算而一次獲得需要的數據。

連載鏈接: 上一篇 << ooo >> 下一篇


推薦閱讀:

Dynamo根據參數過濾
Dynamo應用秘籍:9:線與面的Parameter
Dynamo應用秘籍:3:理解關聯式語法

TAG:Dynamo | AutoDeskRevit | 参数化设计 |