一種有趣的三角形細分網格方法

一種有趣的三角形細分網格方法

來自專欄 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如圖建模??

www.zhihu.com圖標

gh文件下載:

鏈接: pan.baidu.com/s/1A0xdCr 密碼: tud1

需要gh1.0及以上版本

需要插件mesh edit


推薦閱讀:

Grasshopper做「垂直的潮汐」

TAG:建築學 | Grasshopper | Rhino |