如何用不同大小互不重疊的矩形拼成一個大矩形?

這樣的問題想必每個學習grasshopper的朋友都思考過。最近又有羣友提問,我嘗試了幾種方法,供大家參考。

1.Random Quad Panels

這是插件Lunchbox的一個電池,能直接劃分曲面,缺點是隻有一個方向是隨機的,而且數量多了很容易發現規律。

2.分形

將大矩形分成4份,生成的小矩形作為接下來迭代的輸入數據,然後使用插件Anemone循環。缺點是矩形的尺寸快速減少而數量爆炸增長,實用性差。

3.分形改良

每次迭代之後,不必將所有矩形都分成4份,可以只挑選最大面積的矩形進行分割

因為分割出來的新矩形要作為下次迭代的輸入物件,所以雖說是分割,其實是重新畫四個小矩形。

讓分割出來的小矩形隨機變化大小,就能得到較好的結果

簡述邏輯:

首先把所有矩形按照面積排序,用Split List把最大矩形和其餘矩形分離開來。

以該最大矩形中心點為圓心,短邊長為 直徑上限 畫圓,利用隨機數在圓上取點。

將該點與矩形4頂點分別作2點確定的矩形,與剩餘矩形合併,進入下一次循環。

值得一提的是,為了在迭代的過程中使每個矩形都能獲得一個不同的種子,我對舉行面積進行簡單計算解決這個問題。之所以要除以一個如此小的數,是因為當矩形的面積接近1時,種子便很難變化,圖案會變得規則。

優點是矩形尺寸隨機了

缺點是規律太明顯

4.分形改良-七巧板式

如果讓每一次細分矩形的樣式變得複雜一些,或許就能遮蓋其中的規律

所以我嘗試了這樣的細分:

整體情況大同小異,只不過在畫完點後再畫一個矩形罷了。

最終結果如下:

調節隨機的範圍可以改變外形

5.分形改良-二分裂式

和之前類似,只不過這種方法每次迭代只會多生成一個矩形。這也使得它的圖形最為自然。

首先還是依據面積分離出最大矩形。

之後建立xy平面:提取最大矩形的2條短邊中點為平面中心,短邊正切方向為x軸

然後對矩形進行平面y軸的單軸縮放,縮放比隨機。

之後再合併其他矩形,進行下一次迭代。

調節隨機的範圍可以改變外形

需要插件Anemone,gh版本1.0及以上

生成題圖的電池需要插件mesh edit

文件下載

鏈接:pan.baidu.com/s/15LzW2S

提取碼:mv92


推薦閱讀:
相關文章