2024年2月2日金曜日

【Grasshopper_94】Voronoi形状の極小エッジを削除する方法


Voronoi形状を作るとき、極めて長さの短い辺が出来てしまうと、その後のデータ加工の際にサーフェスが壊れてしまうなど、うまくいかないケースが出てきます。

それを避けるために、極小長さのエッジを削除する方法を考えてみました。ネットで検索するといくつかやり方が出てきますが、誰でも作りやすいように、自分なりにアレンジを加えたものを紹介します。


・XY平面上に適当な大きさのレクタングルを作成し、ランダムな点を作成してからVoronoi形状を作成します。

・Explodeコンポーネントにつないで辺と頂点を取り出しますが、レクタングル上にある頂点が後の工程で必要になるため、分類して取り出しておきます。

・Voronoi形状のすべての辺の長さを測り、閾値よりも大きい辺を取り出し、End Pointsコンポーネントにつないで端点(始点と終点)を取り出します。

・同時に、Voronoi形状の全頂点をCull Duplicatesコンポーネントにつなぎ、閾値よりも互いの距離が近い点は両方とも削除し、その中間点に置き換えます。閾値よりも互いの距離が大きい点はそのまま残ります。

・先ほど求めた端点の始点側、終点側それぞれに以下のような考え方を適用していきます。

・先ほどのCull Duplicatesコンポーネントにつないで求めた点群をClosest PointコンポーネントのCにつなぎ、端点の始点に最も近い点を求めます。その次に、レクタングルの境界上にあるVoronoi頂点を同じくClosest PointコンポーネントのC側につなぎ、最も近い点を求めますが、それらの距離と閾値との大きさの比較を行い、小さい場合のみ取り出すようにします。最後に、取り出した点、インデックス番号を使ってReplace Itemsコンポーネントにつなぎ置き換えると、置き換え後の始点が求まります。

・同じ考え方を終点側にも適用し、置き換え後の終点を求めます。

・最後に、さきほど置き換えた始点と終点を直線で結び、結合したら完成です。閾値が大きすぎると辺が部分的に欠落しますので、スライダーを調整してちょうどいい数値を探す必要があります。


0 件のコメント:

コメントを投稿

【Grasshopper_98】SporphとSurface Morphingの特徴、違いなどについて

今年もまたGWに突入しましたね。コロナ明けに円安、インバウンド特需のおかげで東京から郊外に出かけると例年以上に混雑に巻き込まれそうなので、昨年と同様、連休中は家に籠ってブログを更新します。今回のテーマは、Surface MorphingとSporphの違いについてまとめてみました。