Dynamo應有秘籍:4:確保首末數據封閉的序列
01-25
在Code Block中,我們可以使用快捷方式構建在一定區間的數字列表,也有幾種簡單的表達格式,也是在日常編程中最常用的:
有的時候,在精度範圍內,可能我們使用a..b..~c+0.1或者a..b..~c-0.1,都可以得到與a..b..~c同樣的結果。這在我們對一條曲線按照需要的長度進行等分時非常有幫助,因為曲線的長度可能是變化的非整數,直接使用「~」將省去大量的數學計算而一次獲得需要的數據。
推薦閱讀:
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}
可以看到結果序列的最後的數字並不是我們指定邊界數字,這也很好理解,因為間距不是整除數,最後的邊界數字是不滿足遞增條件的。
但是很明顯,我們設定邊界數據是有需要的,有時候是需要達到邊界數字的,做到這樣就有幾個方法:
- 確保間距為整除後數字,這很容易理解
- 使用#直接指定等分數目,由程序去自行計算間距這兩種情況下,都需要我們對已有的ABC數字先進行一定的運算,再修改其值來構造序列,這也是比較符合日常邏輯的方式。
我們只需要將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。
依然用之前的例子,我們可以看一下增加「~」控制符後,數據的結果有何不同:
連載鏈接: 上一篇 << ooo >> 下一篇
推薦閱讀:
※Dynamo根據參數過濾
※Dynamo應用秘籍:9:線與面的Parameter
※Dynamo應用秘籍:3:理解關聯式語法
TAG:Dynamo | AutoDeskRevit | 参数化设计 |