因為昨天在fb grasshopper 資訊交流站 回答了一個問題,剛好也有幾個網友提供不同的方法,因此把它整理成一篇文章,提供給更多人未來在學習Grasshopper可以參考。
原始問題:
解法1:
我自己提供的解法,但應該算是最麻煩的解法,是利用Path Mapper,這個節點沒看說明真的不會用,我第一次找教學的時候也是看得一知半解,但後面發現它的彈性比較大,可以解決更複雜的結構調整。
解法邏輯很簡單,先將原本三個集合{A1, A2, A3}, {B1, B2, B3}, {C1, C2, C3}接在一起變成一個大的List {A1, A2, A3, B1, B2, B3, C1, C2, C3},接著來調整List的順序
接著我們透過一個Path Mapper的物件,左鍵點兩下後開啟編輯視窗,輸入
{A}(i) -> {i%3}
此輸入法的意思是,我們把原本在List A中編號0到編號8的總共9個物件重新群組,我們利用i%3,也就是找出i除以3之後的餘數來分類,餘數為0的A1, B1, C1會掉到第一組裡,餘數為1的A2, B2, C2會跑到第二組,其餘依此類推即可完成簡單的分類。
關於Path Mapper的詳細用法可參考下圖,不是我自己製作的圖,因此是英文的,原圖出處我已經忘記從哪找到的,大家可以參考看看。
解法2:
利用Graft與Merge,此法是我認為最簡單的作法,請參考下圖。
剛看到這個問題的時候腦中馬上就浮現這個做法,不過有人更快回答了(感謝 陳志源與Chun-Chan Chien 這兩位朋友的示範),所以當時我是提供path mapper這個額外的解法。
此解法的概念很簡單,但不好說明,先透過Graft將三組資料結構各多分為3組資料,因此目前的資料結構從3X3變成3X3X1組資料,接著利用Merge把同樣資料結構的物件放在一起,因此就可以得到我們想要的樣子。
解法3:
利用Weave,這個節點在此之前我一直不清楚怎麼用,感謝Chen Ching-Hsin的示範,我們先上圖
上圖上方的解法就是本題的解法,簡單的說我們給定0, 1, 2這個規則,因此它會照這個順序先從編號0的List取一個值,再去1的List取值...依此類推,依照這個規則不斷取值直到結束。
下方則是提供更複雜的排序方法,我們給定0, 1, 2, 2, 1, 0,讓它取值所以它會依照A->B->C->C->B->A的順序來取值,因此最後的結果就是{A1, B1, C1, C2, B2, A2, A3, B3, C3}。
Comments