2019年2月24日日曜日

【Grasshopper_11】フィボナッチ数列風な球体形状(fibonacci sphere)の作り方


フィボナッチ数列を使った球体を、試行錯誤しながら形を作ってみました。

厳密にフィボナッチ数列に従ったものではありませんが、それに近い感じが出せているかなと思います。

作り方は結構、複雑なのでのちほど、解説していきたいと思います。
球体の直径は500φです。

Step1.螺旋カーブを作成する

・Point Cylindricalコンポーネントを使い、Z方向に伸びる螺旋カーブを作成します。
 このコンポーネントのA入力のExpression欄にマイナス値を入れることで、逆方向のカーブも含めた、2つのカーブを作成しています。
 ※判別しやすいように、A_crv、B_crvとしています。

・P入力は原点、R入力は直径の半分の250(Expression欄でx*0.5)、A入力は0Pi~2Pi間をrangeコンポーネントで100分割した数値を入れます。

・A入力については、点の上昇する割合が一定ではなく、徐々に変化させるため、Graph Mapperを使って調整しています。

・高さについては、点が増加するたびに10増えるようにSeriesコンポーネントを使って数列を作って、E入力につないでいます。

Step2.作成したカーブを回転コピーする

・Step1で作成した対のカーブをそれぞれ、XY平面上で回転コピーします。

・コピーの数はスライダーでお好みで。今回は360°を14等分した数値をA入力につないでいます。

Step3.上下反転させる

・Step2で作成したカーブを上下にミラー反転しJoin curvで結合します。

・bounding boxを使い高さを取得し、その高さのところに平面を作り、ミラー反転の基準面としています。

Step4.円筒に張り付ける

・CylinderコンポーネントでStep3のカーブの高さと同じ長さで円筒を作成します。
 R入力は直径の半分の250(Expression欄でx*0.5)、高さLはStep.3で作成した、反転込みの総高さと同じにします。

・Step3で生成したカーブをPull Curveコンポーネントで円筒に張り付けます。

Step5.ひし形と三角形のサーフェスを分離する

・0からpiまでの半円を作成し、extrudeでZ方向に押し出しサーフェスを作成。
  ※延長する高さはStep2で作った円筒の高さと同じです。

・半円押し出しサーフェスをStep.4で作成した2種類のカーブでSurf Splitを使い分割します。

・分割したサーフェスは、四角形と三角形の2種類ができますが、後の工程のことを考え、これらを分類します。

・Brep Edgeコンポーネントで各サーフェスのエッジを取得し、List Length、Equal、Dispatchコンポーネントを組み合わせ、リストの長さが3かそれ以外かでサーフェスを分別します。

Step6.ひし形と三角形のサーフェスを分離する

・今度は、Piから2Piまでの半円について、Step5と同様の作業を行います。

Step7.四角形のクローズカーブを作成する

 ・Step.5とStep.6で仕分けした四角形についてはBrep Edgeコンポーネントでエッジを取得し、Join CurveコンポーネントでClosed Curveを生成します。

Step8.微小部分を削除する

・Step.5、Step.6で仕分けした三角形について、必要なのは側面のサーフェスであり、円筒の上端、下端にできる微小な部分は必要がないため削除していきます。

・微小な三角形の仕分けは、この部分の面積が三角形の中で最も小さいことを利用しますので、Areaコンポーネントを使ってすべての三角形サーフェスの面積を計算し、小さい順にソートし、最も小さい面積と同じかそうではないかを判別し、Dispatchコンポーネントで仕分けします。

・必要なのは側面部のサーフェスなので、DispatchのB出力から取り出します。

Step9.三角形サーフェスの左右を分ける

・Step.8で分類した三角形サーフェスは左右で同じ階層になっているため、次の工程で加工がしやすいように分離します。

・XY平面上に三角形の中心点を投影し、片側を枠で囲んで分類することで、LH側とRH側に分けることができます。

Step10.隣同志の三角形からひし形を作る

・Step.9の三角形からひし形のエッジを作成していきます。

・三角形の順番がずれると形がおかしくなるため、三角形の中心点を求め、Z方向の座標の順番にソートします。

・三角形のサーフェスをBrep Edgeで抽出します。当然、3本のエッジが取り出せますが、そのうちLine-like curveは必要がないので、Lineという名称がついているかどうかをMacth Textで判別し、Cull patternで所定のカーブを取り出し、結合して閉曲線にします。

Step11.球にマッピングする

・まずは直径が500mmの球体をSphereで作成します。あとで少し小さめの球体も使いますので、同時に作っておきます。

・Step.7で作ったひし形の閉曲線と、Step.10で作ったひし形の閉曲線を、それぞれ別個に、球体にマッピングします。

Step12.マッピングした曲線を面化する

・Step.11で生成したマッピング曲線をDiscontinuityとShutterを使って4本に分解し、Network Srfでサーフェスを張ります。

Step13.切り抜き用のソリッドを作る

・Step.12で作ったサーフェスを、原点に向かってExtrude Pointを使って四角錐を作ります。

・確実にカットできるように、四角錐を、各サーフェス中心点と原点の間のベクトルを外側に若干量、移動させつつ、スケールダウンさせます。

Step14.最後の仕上げ

・Step.13で作った四角錐と、球体及び少し小さめの球体との交線を求め、Loftで側面を作ります。(GrasshopperのLoftは、上の図のように時たま不具合を起こしますので、その部分は手作業で修正します)

・表面は、球体を交線で分割し、桟の部分を残します。

・裏面は作っていませんが、とりあえず完成です。

ざっと簡単に手順をまとめてみました。難易度的には難しい部類に入りますので、試行錯誤しながら作って見てください。わからないところがあれば遠慮なく質問をどうぞ!

3 件のコメント:

  1. 突然のコメント失礼します。きのこと申します。
    最近このサイトを見つけ、興味深く拝見しております。

    質問を受け付けているということで、お言葉に甘えさせていただきます。
    このフィボナッチ数列的球体を再現しようとしておりますが、
    Step1、Step3でつまづいております。

    ○Step1について

    ・Graph mapperの手前の、RangeコンポーネントのStepに設定されているExpression内の数式がわかりません。
    ・”このコンポーネントのA入力のExpression欄にマイナス値を入れること”とあったので、-Xを入力しましたが、これは正しいでしょうか?

    ○Step3について

    ・Mirror、Mergeコンポーネント手前のCurveA,Bの名前が入ったコンポーネントは何でしょうか?最初はPanelかと思いましたが、GraftとSimplifyがついているので違いますよね。

    以上、教えていただけると幸いです。
    よろしくお願いいたします。

    返信削除
  2. コメントありがとうございます。ご質問の件です。

    ・Graph Mapper手前のExpression欄の入力は、点の数を微調整するためですので、入力値から1を引き算するということで、x-1を入力しています。

    補足ですが、右の方にあるPoint Cylindricalコンポーネント(下側)のA入力のExpression欄は、角度をマイナスにするために、x*-1を入力しています。

    ちなみに、試してみたところ、-xという表記ではエラーになるようです。

    ・Mirrorコンポーネント手前にあるものは、Grasshopper画面のParamsタブ左側に固まって配置されている黒いアイコン群から持ってきた物です。中継端子と呼ぶとわかりやすいかと思いますが、流れているデータがどのようなものか、判別しやすいよう名前をつけるために意図的にかましているもので、特に何か処理をするためのものではないです。これにはGraftとかFlatten等は設定可能です。

    以上、ご参考になれば幸いです。

    返信削除
  3. Akemiさま
    コメントへの返答ありがとうございます。

    Step1については、いただいた数式で解決しました。
    Step3については、意味的にGeometryかなと思い、コンポーネントの名前を入力して、右にあるペンキの入ったバケツマークを押したら参考画像通りになりました。

    進めるほどに、壮大なコンポーネント構成であることが実感できてきました。
    少しずつ進めていきたいと思います。

    また質問させていただきます。
    ありがとうございました。

    返信削除

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

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