2018年4月4日水曜日

【Grasshopper_01】Voronoi図を使った円形グラフィックパターンの作り方


Voronoi図形を使って、もっとおもしろい表現がないかなと思いネットサーフィンしていたところ、下記ブログにて自動車のホイールで再現されていたパターンを見つけました。


Grasshopperのアルゴリズムが公開されていないので、勉強がてら自力で作ってみたのがトップに添付した画像です。

作り方を下記にまとめましたので、ぜひ参考にしてみてください。
※半径が50と400の円は3種類共に使います

左の渦巻き型

Step.1 数式に沿った点群を作成する

・フィボナッチ数列に従い、点群を作成します。

・数式は上の図の通りで、X側Seriesコンポーネントの初期値3.0、増分1.5、個数1000、Y側Seriesコンポーネントの初期値30.0、増分3.7、個数1000にしています。

Step.2 同心円を作成する

・次に、同心円を2個作成します。

・半径はそれぞれ50と400にしています。

Step.3 点群を選別する

・Step.1で作成した点群を、Step.2の外側の円(半径400の方)で内側に含む点だけ選択します。(Curve SideコンポーネントとCull Patternコンポーネントを組み合わせる)

・同じ要領で、Step.2の内側の円よりも外側の点群を選択します。

Step.4 Voronoi図を作成する

・Step.3で抽出した点を入力として、Voronoiコンポーネントを使ってVoronoi図を作成します。

・Voronoi半径は100に設定。

Step.5 Voronoi図を加工する

・Step.2で作成した外側の円をOffsetさせて、Step.4で作成したVoronoi図との相関部分の抽出をRegion Intersectionコンポーネントによるブーリアン演算で実行。
(Voronoi図をA入力、円をB入力にしています。)

・同様に、今度は内側の円をOffsetさせて、Region Deferenceコンポーネントによるブーリアン演算を実行。
(Voronoi図をA入力、円をB入力にしています。)

Step.6 オフセットさせる

・Step.5のVoronoiカーブをOffsetコンポーネントでオフセット処理をします。

Step.7 完成



中央の渦巻き型

Step.1 同心円を作成する

・同心円を作成します。

・RangeコンポーネントのN入力に同心円の数(今回は7)を入力して0から1の範囲を8等分する数列を作成します。

・その後ろでGraph Mapperコンポーネントを使い、8等分の割合に変化をつけます。

・最大半径を400とし、Graph Mapperコンポーネントの出力と掛け算した数値を半径とした円を作成。

・Cull Indexコンポーネントを使い、最小の円は除外しておきます。

Step.2 最大円を等分する

・Step.1で作成した同心円から、List Itemコンポーネント(インデックスは-1)で一番外側の円を選択し、Divide Curveコンポーネントで等分割します(今回は7を入力)

・作成した等分割点と原点を直線で結びます。

・作成した7本の直線と、Step.1で作成した同心円をCurve Curveコンポーネントで交点を求めます。

・交点の出力をFlattenで平たん化したあと、Insert Itemsコンポーネントを使い、0番目に原点を挿入します。

・その後、Interpolateコンポーネントと使い、3次の曲線を作成します。

Step.3 Nurbsカーブを回転コピーする

・Step.2で作成したカーブを原点周りにRotateコンポーネントを使い回転コピーします。

・コピー数はお好みです。Seriesコンポーネントを使い、N入力に360をコピー数で割った値、C入力にコピー数をそのままつないでRotateのA入力にInputすると便利です。
(RotateコンポーネントA入力を右クリックしてDegreesをONにしておきます)

Step.4 Nurbsカーブを細分化させる

・RangeコンポーネントN入力に細分化する数(今回は10)をつなぎ、その出力をGraph Mapperコンポーネントにつないで変化を加えます。

・次に、ShutterコンポーネントのC入力にStep.3で求めたカーブをつなぎ、t入力にGraph Mapperコンポーネントの出力をつなぎます(ShutterのC入力はReparameterizeをONにしておきます)

・作成した細分カーブの両端の点をEnd Pointsコンポーネントで求め、End側を取り出します。

Step.5 点を選別する

・Curve Sideコンポーネント、Cull Patternコンポーネントを使い、Step.4で作成した点のうち、二つの円の間にある部分を抽出。

Step.6 Voronoi図を作成する

・Step.5で抽出した点を基準に、Voronoiコンポーネントを使ってVoronoi図を作成。

・Voronoi半径は200を設定。Voronoiコンポーネントの出力はGraftをONにしておきます。

Step.7 Voronoi図を加工する

・Region Intersection、Region Defereceコンポーネントを使い、Step.6で作成したVoronoi図と二つの同心円それぞれにブーリアン演算を実行して上記画像の状態にします。

Step.8 オフセットさせる

・Step.7で求めたカーブをOffsetコンポーネントでオフセットさせます。

Step.9 完成


右の放射型

Step.1 同心円の作成

・二つの同心円(半径50,半径400)それぞれをDivide Curveコンポーネントで2分割し、片方の点を直線で結ぶ。

・次に、Rangeコンポーネントで0から1の間の等分した数値を生成(今回は9等分)し、Graph Mapperコンポーネントで変化を付けます。

・次に、作成した直線の細分化をShutterコマンドで行い(Graph Mapperコンポーネントの出力をtにつなげる)、End pointsコンポーネントにつなげてSを出力します。
※ShutterコンポーネントのC入力を右クリックしてReparameterizeをONにします。
※S出力の点のばらつき具合が上図と逆の場合は、Graph Mapperコンポーネントの出力を1から引き算した値を使う。

・原点を中心とし、求めた点と原点からの距離(Distanceコンポーネント)を半径とする円をCircleコンポーネントで生成。

Step.2 同心円の等分割点を、交互に放射上に移動させる

・Step.1で求めた同心円をDivide Curveコンポーネントで20等分します。

・Cull Patternコンポーネントを2つ用意し、Set Multiple Booleansの項目を、片方がTrue False、もう片方をFalse Trueと設定し、求めた等分点を分岐させます。
※Cull Patternコンポーネントの出力はいずれもFlattenにしておきます。

・Vector 2ptコンポーネントを使い、上記手順で求めたCull Patternコンポーネントの出力と原点との間のベクトルを求めます。
※原点をA入力、Cull Patternコンポーネント側をB入力とし、B入力にGraftを設定

・二つのCull Patternコンポーネントの出力をMoveコンポーネントにつないで移動させます。

・移動させる方向は、上記手順で求めたベクトル、及びNumber Sliderによる任意の数字をAmplitudeコンポーネントで設定します。

Step.3 点を選別する

・Step.2で求めた点のうち、同心円の間にあるものを選別
※Curve SideコンポーネントとCull Patternコンポーネントを使います

Step.4 Voronoi図を作成する

・Step.3で求めた点を中心にVoronoiコンポーネントを使いVoronoi図を作成。
※Voronoi半径は280に設定。Voronoiコンポーネントの出力はGraftにしておきます。

Step.5 Voronoi図を加工する

・Region Intersection、Region Defereceコンポーネントを使い、Step.4で作成したVoronoi図と二つの同心円それぞれにブーリアン演算を実行して上記画像の状態にします。

Step.6 オフセットさせる

・Step.5で作成したカーブをオフセットさせます。

Step.7 完成

以上、作り方を簡単に紹介しました。
数値入力の部分をNumber Sliderにして調整すると、いろんなバリエーションが生まれますので、色々試してみるとおもしろいです。

0 件のコメント:

コメントを投稿

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

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