今回はGrasshopperを使用して、任意の直線状に垂直ルーバーを設置する簡単なチュートリアルを書いていこうと思います。Grasshopperを始めたばかりの人向けに書いてますので、初級者向けになっております。
Contents
概要

以下のパラメーターとして、Grasshopper上で変更できるようにプログラムを組んでいこうと思います。
- ルーバーの数
- ルーバーの高さ
- ルーバー断面のサイズ
- ルーバーの回転角
プログラムのざっくりとした流れは以下になります。
- 任意の曲線をセットし、ルーバーの数量に分割
- 曲線の各分割点において、曲線の接線に垂直な法線を求める
- 接線と法線を軸とする平面を求め、各分割点を中心としたルーバーの断面を作成
- 作成したルーバーの断面を高さ方向に押し出してポリサーフェイスの作成
- 押し出したポリサーフェイスを回転させる
曲線の分割


- 上画像のようにRhinoceros上で適当な曲線をXY平面に作図し、Grasshopperで「Curveコンポーネント」にセットします。
- セットしたカーブを「Divide Curveコンポーネント」で分割していきます。入力端子CにはCurveコンポーネント・Nは分割数を入力します。分割数はルーバーの数から1を引いた数になります。
分割点における接線の法線を求める


- 「Cross Productコンポーネント」を使用して分割点の接線ベクトルとZ方向のベクトルの外積を求めることで、法線ベクトルを算出します。
- 「Divide Curveコンポーネント」の出力端子Tは、各分割点における接線ベクトルを出力します。出力端子Tを「Cross Productコンポーネント」の入力端子Aにつなぎます。
- 「Cross Productコンポーネント」の入力端子Bに「Unit Zコンポーネント」を使用し、Z方向の単位ベクトルをつなぎます。
- 「Cross Productコンポーネント」の出力端子Vに法線ベクトルが出力されます。法線ベクトルがちゃんと出力されているか確認するために「Vector Displayコンポーネント」で可視化します。
- 「Vector Displayコンポーネント」の入力端子A(Anchor Point)に分割点Pをつなぎます。
- 「Vector Displayコンポーネント」の入力端子V(Vector)に法線ベクトルを入力しますが、見やすくするために「Amplitudeコンポーネント」で長さを持たせています。
- 2枚目の画像のようにしっかり法線ベクトルが出力されています。
接線と法線を軸とする平面を求め、各分割点を中心としたルーバーの断面を作成


- 「Construct Planeコンポーネント」を使用して接線ベクトルと法線ベクトルを軸とした平面を作成します。入力端子O(Origin)に分割点、X端子に接線ベクトル、Y端子に法線ベクトルを入力します。
- 「Rectangleコンポーネント」を使用し、各分割点を中心とした四角形を作成します。
- P端子(Plane)にさほど作成した平面を入力。
- X端子には接線方向のドメイン、上の画像ではルーバーの厚みを30mmとしたいので、(-15~15)のドメインを入力しています。
- Y端子には法線方向のドメイン、上の画像ではルーバーの幅を200mmとしたいので、(-100~100)のドメインを入力しています。ルーバーの厚みと幅は「NumberSliderコンポーネント」を使用して任意のサイズに変更できるようにしています。
- 2枚目の画像のように各分割点において、ルーバーの断面が作成されました。
作成したルーバーの断面を高さ方向に押し出してポリサーフェイスの作成


- 作成したルーバーの断面を「Extrudeコンポーネント」でZ方向に押し出していきます。入力端子B(Base)に先ほど作成したルーバーの断面、D端子(Direction)には「Amplitudeコンポーネント」でルーバー高さをもたせたZベクトルを入力します。
- 「Extrudeコンポーネント」で作成したしたルーバーの上面と底面を「Capコンポーネント」を使用して蓋をします。
- 2枚目の画像のようにルーバーが立ち上がりました。
押し出したポリサーフェイスを回転させる

- 「Rotateコンポーネント」を使用して作成したルーバー(ポリサーフェイス)を各分割点を中心に回転させます。
- 入力端子G(Geometory)に作成したポリサーフェイスをつなぎます。
- 入力端子P(Plane)には各分割点の接戦ベクトルと法線ベクトルを軸とした平面を入力
- 入力端子A(Angle)には角度を入力します。A端子はラジアンでの入力になるので、「Radiansコンポーネント」を使用して角度をラジアンに変換して入力します。
以上で完成です!テキストベースだったので、わかりにくい箇所が多々あったかと思いますが最後にコンポーネント全体を載せておきますのでご参考ください。