一種有趣的三角形細分網格方法
來自專欄 Rhino3D(犀牛3D)14 人贊了文章
近日,有群友詢問如何實現這張圖片上的效果:
我研究了一下,發現這種用三角形細分三角形網格的方法確實優雅又有趣,而且方法巧妙,過程簡單,就拿出來和大家分享一下。
觀察圖片我們能得到幾個特徵:
1.整個模型的所有單元都是三角形
2.每個大三角形都被小三角形細分了
說到全部由三角形構成的網格,熟悉gh的網友可能會想到delaunay mesh這個電池
它可以將一些平面上的點自動連接成一個由三角形構成的網格
如果我們能用上這個電池,那麼問題「如何用小三角形細分網格」就轉化成「如何確定小三角形的端點」了
再看一下圖片,我們能發現另一個特徵:
3.距離大三角形邊緣的小三角形特別整齊
其實到這裡,細分邏輯就已經展現出來了,如果把這些 非常整齊的三角形 的共線邊 高亮顯示,一切都將一目了然:
這些小三角形整齊的原因就是他們的頂點全部位於 大三角形邊框線 偏移後的線 上!
由於圖片最右側的三角形更大一點,這種偏移進行了兩次。我們推測,如果大三角形的尺寸再大一點,它會偏移更多次;而如果大三角形太小,可能一次也偏移不了。
對於某個大三角形,如何判斷邊框線偏移的次數呢?根據直線偏移的定義我們知道,偏移後的線與原線平行,易證偏移後的三角形與原三角形相似。當偏移的距離增加,新生成的三角形就越來越小,直到縮小成一個點。這個點到 原三角形邊框線 的距離就是偏移距離的上限了。由於這個點是由 原三角形邊框線 偏移得來,易證它就是三角形的內心。求出內切圓的半徑,就能方便地控制偏移的次數和距離了。
偏移之後,在線上取點。觀察易得,對偏移後的線進行長度相關的等分就能得到這些點了。
最後使用delauney mesh生成網格,再blabla一通操作做成和圖中相像的就行了。
以下是詳細步驟:
首先你要有一個女朋。。。呃,模型
我隨便畫了一個完全由三角形構成的多重曲面
拾取進gh,並作出如圖操作:
因為在曲面轉曲線時,曲線的方向有時並不和曲面法線方向相關,(bug?)而曲線的方向和偏移方向相關,所以若要統一偏移方向,就必須讓曲線方向一致。所以,在rh里拾取的幾何物件必須是多重曲面,這樣所有面的法線方向就是統一的。之後,提取曲面的法線方向並得到曲面所在平面,然後在該平面上畫一個圓,用這個圓的方向來調整所有三角形邊框線的方向。最後就能得到調整過方向的邊框線了。
下一步就是偏移了,但是在這之前我們先要求出每個大三角形的內接圓的半徑。我們手動輸入每次偏移的距離,用半徑控制偏移的次數。
使用circle tantantan求出三角形內接圓,deconstruct circle求出半徑。過程如下:
如何實現「用半徑控制偏移的次數」?
首先設單次偏移距離為x,用半徑除以x,用round求出大於該商的最小整數y,這個整數y就是偏移的次數。由於每次偏移的距離都是互相獨立的,所以用一個首項為0,公差為x,項數為y的等差數列得到每一次偏移的距離。然後偏移,注意把 偏移的平面 更改為之前確定的 三角形所在的平面。
之後,用同樣的方法得到這些曲線上的等分點
調整這些點的數據結構,使得每個大三角形內的點都在一個枝幹內,使用cull duplicates刪除所有重複的點,然後使用delauney mesh生成三角形網格,也要注意把 網格的平面 更改為之前確定的 三角形所在的平面。
然後偏移縮放加管炸來炸去什麼的一通操作,就做完了!
配合我之前的一篇回答,能方便地達到想要的效果:
使用rhino如圖建模?
gh文件下載:
鏈接: https://pan.baidu.com/s/1A0xdCr0QgSSpbJF2CQkB6w 密碼: tud1
需要gh1.0及以上版本
需要插件mesh edit
推薦閱讀:
TAG:建築學 | Grasshopper | Rhino |