請問怎麼用grasshopper在球面上均勻布點,很均勻且有一定規律的那種?

時間 2021-06-02 01:32:19

1樓:hiyajomaho

點進來一看已經有答主寫出很好的gh解決方案了,我就說點其他的。。。

如果你說的均勻布點是指所有點與其相鄰點的距離一致,那麼嚴格來說最多只能均勻布置20個點,即在球裡巢狀乙個十二面體,用wearverbird可以直接生成

點數超過20的時候都是「大致」均勻了,不過對建築設計來說已經足夠優化了_(°:з」∠)_

2樓:SophistiCATe

這個問題太寬泛了。均勻分布是多均勻?所謂的規律是什麼規律?我只能胡亂推測一下:

警告!這是一道引起密恐的題。

Level 1: Poisson Disk Sampling,沒有規律就是最好的規律

泊松取樣其實是乙個很廣泛應用的取樣方法,每個樣本的位置隨機,但較之真正的隨機點,泊松取樣的每個點都保證距離其他點不小於某個值,且點之間的距離盡量均勻。泊松取樣的定義決定了真的泊松取樣演算法的時間複雜度是O(n^2), 為了快速計算這個取樣產生了很多近似演算法。。。

說了這麼多,其實GH自帶乙個近似的泊松取樣器,Populate Geometry. 乙個電池就搞定了。。效果如下:

Populate Geometry

真正的Poisson Disk Sampling

嗯嗯,似乎離理想的泊松分布那種Illustrator填充圖案一樣的質感有距離。但這個方法簡單易行,且適用任何幾何形體的(類)均勻分布

Level 2: 隨機極座標+Kangaroo,動態平衡是數學懶人的解藥

球面是乙個很特殊的幾何形,球面上的點我們可以很簡單地用極座標描述。這樣我們可以利用Random生成一系列xy角和z角,再用point polar快速製造乙個不均勻的球面點分布。因為極座標的原因,點擠在兩級。

但是沒關係!我們有萬能的kangaroo2……

極座標隨機

Kangaroo由於並不是精確的力學直譯器,所以在2裡淡化了力的概念,轉而用幾何變形的目標來約束形態,這是乙個更精確的改動。並且kangaroo 2運算效率更高。用1 的同學用點之間power law以及mesh對點的吸引來解決均勻分布的問題,用2的同學可以用strength為負數的magnet和onMesh goal來達到相同的效果。

由於斥力是均勻的,點之間的連線長度趨於相等,所以點之間很容易就形成了正三角形的圖案,似乎有點「規律」的影子了。

Kangaroo

Level 3 更多數學,更多規律,越規律越密恐

經過level2我們發現,正三角形分布就是均質和規律的答案,為什麼我們還需要kangaroo求解?我們完全可以直接在球面上劃分出類似的三角圖形。接下來高中幾何預警!

我們第一步在極點附近畫乙個小圓,確定球面上三角形的大小。接下來將球面畫圓,圓之間的弧面距離應該近似於第乙個三角形的邊長L乘以Cos(Pi/6),即等邊三角形中線長度。(因為圓之間z軸上不等距,提醒大家不能直接用contour電池,必須自己用三角函式算每個圓的Z軸高度哦。

)為了保證圓的數量為整數,球面弧長除以中線長度然後取整,再等分弧長。取整操作在之後的每一步都會存在不再贅述。這時候模型應該類似這樣:

然後按照三角形邊長將每個等高線等分取整,得到模型類似這樣:

注意到有些點上下對齊了,而非我們希望的呈三角形頂點分布。這是因為圓的等分起點都在x軸上。我們要把每個圓上的點都旋轉乙個角度(每個圓相對於上乙個圓旋轉arctan(0.

5*L/Ri),即

Ri是當前圓的半徑),使臨近的點盡量錯開成三角形。因為每個圓取整等分後並不是嚴格的等邊三角形間隔,所以不均勻難以避免。模型會變成這樣:

似乎比剛才要好一些,但還是有上下對齊的點。這個時候,我們指要縮小第一步中圓的半徑,使三角形的邊長遠小於球面半徑,那麼相鄰圓之間幾乎總有近似的等邊三角形對應。這個時候模型就變成了這樣:

這看起來比kangaroo模擬的還要有規律,幾乎就是等邊三角形分布在球面上(雞皮疙瘩)。

這三個解法的電池數如下。孰優孰劣嘛……

還能再給力一點嗎?

Level 4 用元胞自動機爬行球面

待續。。

3樓:

沒試過,但是有一種思路,看下行行不行。

先把點布在球面上,然後把點轉成網格,然後,用kangou給網購邊施加拉力,每個邊拉力平衡,點就均勻分布了。

扎哈這種曲線建築是用 grasshopper 建的嗎?

KKser 按工作流的關係出發,這種應該是手繪出草稿,再用maya塑型,rhino和gh可能會有輔助,最後進CATIA吧。當然gh可以做出來,但只是為了建模而建模,不是正向的。 盧小壬 首先,Zaha的工作流是 競賽階段Maya捏型,導Rhino深化出圖,PreSD和SD階段邊深化邊用Grassho...

請問怎麼用Python寫出這個

Root flag input 請輸入你的字串 zm fori inflag if i.isalpha i notin zm zm iif len zm 10 print 找不到十個字母。else print zm 11 1 1 布衣弓長 s input 請輸入字串 ss iflen s 10 fo...

請問大家護理英語怎麼學?怎麼考?怎麼用?

Felicia來自添翼 護理英語不同於咱們平時的公共英語,公共英語中涉及的醫學詞彙很少。醫學護理英語對於每個人來說,都很陌生,所以大家開始學,起點都是差不多的。沒有什麼門檻,有英語四級的基礎最好 醫學英語詞彙比較繁複難記,而詞彙又是聽說讀一切英語交流的基礎,所以建議先從詞彙入手。可以自己買書學,但要...