この記事ではGrasshopperを用いたパラメトリックなモデリングのチュートリアルとして、アトラクターで制御するボロノイ多角形のモデリングに取り組みます。
Rhinoceros+Grasshopperについて

Rhinoceros+Grasshopperでパラメトリックにモデリングする大枠の流れと目的については、以下の記事をご参照くださいませ。
MENTERU TECH BLOG|
Rhinoceros+Grasshopperで実現するパラメトリックなシミュレーションによる建物形状の最適化アプローチ
https://tech.menteru.jp/notes/Rhinoceros-and-Grasshopper
Grasshopperでボロノイ多角形のモデリング
以下の流れで、アトラクターで制御するボロノイ多角形のモデリングを実装します。
- 底面の大きさに応じて基準面を定義し、母点を乱数生成
- 乱数生成した母点に応じてボロノイ多角形を生成
- アトラクター点と各母点との距離でボロノイ多角形を押し出し
ここでボロノイ多角形とは、平面上に設定された”母点”と呼ばれる複数の座標をもとに、どの母点に最も近いかによって平面上の座標空間を分割(=ボロノイ分割)することで作成される多角形のことを指します。ボロノイ分割やボロノイ図は、最寄り駅や最短ルートを探したり、学区割りや店舗の勢力範囲などを可視化する場合によく使われます。

ボロノイ多角形で分割する基準面を定義
まず、ボロノイ多角形で分割する基準となう底面を設けるために、2つの「Construct Point」にxy座標の値(z座標の値は0)を受け渡し、それらを「Box 2Pt」に受け渡して「Surface」として出力をします。この生成した面がボロノイ多角形で分割する基準面です。
次に、ボロノイ多角形を生成する基準点である母点をランダムに生成します。母点の生成は同じく「Construct Point」にxy座標(同じくz座標の値は0)に、「Random」で生成した乱数のリストをx座標とy座標のそれぞれに対して受け渡します。「Random」で乱数生成する値の範囲は、「Construct Domain」で定義して最小値と最大値は事前に生成した基準面内に収まるように整合を取ります。

設けた母点に応じてボロノイ多角形を生成
「Voronoi」のコンポーネントで、ボロノイ多角形を生成します。まず、”Points”に先ほど乱数生成した母点を受け渡し、”Boundary”に先ほど生成した基準面を受け渡します。以上の手続きで、ボロノイ多角形を生成する手続きが完了しました。

アトラクター点を設けてボロノイ多角形を押し出し
最後にxy平面に生成したボロノイ多角形+z方向に押し出して立体を整形します。ボロノイ多角形の各面ごとに押し出す距離を変えるために、各面を規定する母点との距離で押し出し長さを規定するアトラクター点を設けます。アトラクター点は「MD Slider」で生成し、コンポーネントをダブルクリックしたプロパティ画面でxy座標値の設定範囲を最初に生成した基準面と整合を取ります。
ボロノイ多角形の押し出しは「Extrude」で行い、”Base”へボロノイ多角形の各面をリストで、”Direction”へ+z方向のベクトル変換した各母点とアトラクター点の距離のリストを受け渡します。多角形を押し出すだけなので、上面が開いた状態となるので「Cap Holes」で上面を閉じて完成です。

コメント