如何用不同大小互不重疊的矩形拼成一個大矩形?
這樣的問題想必每個學習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
文件下載
鏈接:https://pan.baidu.com/s/15LzW2S-0GpDVwTKDq-uspg
提取碼:mv92