2019年4月2日火曜日

【Grasshopper_15】サインカーブを使った凹み形状の作り方


サインカーブをベースに立体化してみました。
凹み部分の幅に応じて凹み量が変化しつつ、サーフェスになじませる処理も加えた、少々  
複雑な作り方ではありますが、順を追って解説していきます。
 

Step1.公式を使ったサインカーブに沿って点を配置する


・高校の数学で必ず出てくるサインカーブの公式「y = A sin(Ωt + φ)」をGrasshopperのノードで再現します。

・Expressionコンポーネントで記述する方法もありますが、ノードを使って個別に組む場合は上図のようになります。

・振幅Aは1.0、φとΩは0.5とし、0から100piまで1piごとの等差数列をrangeコンポーネントで生成し、X座標としています。

Step2.点群を移動させる


・Step.1で作成した点群をY+方向に2mm移動させます。

Step3.点群のミラー反転

・Step.2で移動させた点群をXZ平面を境にミラー反転し、点ごとに上下の直線をひきます。

Step4.直線の移動コピー


・初めに、Step.3で引いた上下の直線をY方向に移動コピーします。

・移動量の計算は、いくつかやり方がありますが、今回は直線の端点(上側)を取り、boundsコンポーネントで取得した最大値と最小値をそれぞれ2倍にして加算した値としました。

・次に、Y方向に移動コピーした直線群をまるごと右上に移動コピーします。

・移動量は、X方向に2pi、Y方向に先ほどの移動量の半分です。
※後工程において判別しやすいように、2つの直線群をそれぞれAとBに名前を分け、分離しています。

Step5.3Dサーフェスを作成する


・次に、3Dの適当なサーフェスをRhinoceros上で用意します。

Step6.3Dサーフェスへのマッピング


・Step.5で作成した二つの直線群を、Map to Surfaceコンポーネントを使い、3Dサーフェス上にマッピングを行います。

・3Dサーフェスにマッピングした直線群は上の図のように縦に並びますが、横になってしまった場合はサーフェスのUV方向が逆転している可能性があるので別途、コンポーネントを用意してUV軸の入れ替えを行ってください。

Step.7 実際に投影する部分を選別する

・この時点で、2つの直線群AとBは左右で位置のずれが起きているので、使用する部分を選別しておきます。

・適当な大きさの枠を作り、直線群の中点をXY平面に投影後、枠の内か外か判別してから選別します。

Step8.へこみ量の計算に必要な各種データを準備する


・凹み量の計算をする前に、必要なデータを準備します。

・各直線群をDivide curveコンポーネントで5分割します。取り出すのは、曲線の長さ、分割点の座標値、分割点と曲線の中点までの間の距離、分割数です。分割数以外はA、Bそれぞれのものが必要です。

Step9.凹み量を計算する_1


・まず初めに、横方向の凹凸量計算を行います。左右の端末は3Dサーフェスになじませるため0にして、真ん中に向かうにつれて徐々に深さが大きくなるようにします。ただしここの計算は、実際の凹み量の数値ではなく、最大の凹み量に対する割合の計算となりますので、数値は0から1の範囲となります。

・直線群のうち、どれか一つ分の行があれば残りはすべて同じ数値が適用できますので、ここではAカーブの0番目のパスを選別し、Graph Mapperコンポーネントを使い凸カーブを使って数値を変化させています。

・パスの階層に注意が必要です。また、後の工程で掛け算等行いますので、最後にFlip Matrixコンポーネントにつないで行と列の入れ替えを行います。

Step10.凹み量を計算する_2


・次に、Aカーブの凹凸量を求めます。カーブの長さに対して凹み量に変化をつけるため、倍率のMIN値、MAX値をスライダーで調整できるようにし、Step.9で求めた、横方向の倍率と掛け算を行い、縦横の凹凸割合を求めます。

・最大の深さを2mmとして、各カーブごとの中点と分割点間の距離をRemapコンポーネントを使って0mm~2mmの範囲に変換し、最後にさきほどの倍率と掛け算することでトータルの凹み量が求まります。リストの0番目と最後尾は完全に0となっていない場合があるので、念のため、Replace Listコンポーネントにつないで0に置き換えています。

Step11.凹み量を計算する_3


・Bカーブも同じ計算を行います。

Step.10 点群を面直方向に移動させる


・分割点を、求めた凹み量を使って3Dサーフェスの面直方向に移動させます。

Step.11 曲線化する


・Interpolateコンポーネントを使って、移動させた点群を曲線化します。

・横方向の曲線は、XY平面上で曲線化し、次の工程で投影します。

Step.12 サーフェス化する


・横方向の曲線は3Dサーフェス上に投影し、Network Surfaceコンポーネントにつなぎ、Aカーブ、Bカーブそれぞれをサーフェス化します。

Step.13 完成


・最後に、データを整えたら完成です。

0 件のコメント:

コメントを投稿

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

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