Grasshopperでベクトルの回転についてお探しですね。

広告

Grasshopperでベクトルの角度を測って、自由に回転させる方法

パラメトリックな3Dモデリングができる「Grasshopper」を使っていると、「2つのベクトルの間の角度ってどうやって測るの?」とか「好きな軸を中心にして回転させたいんだけど…」という場面にぶつかることがよくあります。

複雑な形や動きのある構造を作るには、この2つの技術がとっても大事なんです。

でも、普通のXYZ軸を使った操作とは違って、自分で決めたベクトルや軸を基準にした計算や回転は、どのコンポーネントを使えばいいのか迷ったり、ラジアンと度数の変換でつまずいたりしやすいポイントでもあります。

この記事では、Grasshopperを始めたばかりの人から、もうちょっと上のレベルに進みたい人に向けて、ベクトルの角度を正確に測る方法や、自分で決めた軸を中心にベクトルや形を思い通りに回転させる具体的な手順を、分かりやすく説明していきます。

ベクトル同士の角度を測る基本のキ

Grasshopperで、空間にある2つのベクトルの角度を測りたいときは、「Angle」コンポーネント(Vector > Vectorタブの中にあります)を使うのが一番シンプルで確実です。

このコンポーネントを使えば、基準になるベクトルともう1つのベクトルの間にできる角度をきちんと計算できて、その数値を使って形を変えたり回転させたりできるようになります。

たとえば、建物の屋根の傾き具合を計算したり、2つの部材が交わる部分の角度を自動で割り出したりするときに、このベクトル間の角度測定がすごく役に立ちます。

ただの線の交わりじゃなくて、向きを持ったベクトル同士を比べることで、もっと高度なことができるようになるんです。

Angleコンポーネントをキャンバスに置いてみると、比べたい2つのベクトルをつなぐための「A」と「B」という入力端子があります。

ここにベクトルのデータを流し込むだけで計算してくれます。

さらに、「P」という3つ目の入力端子もあって、ここには「どの平面を基準にして角度を測るか」を指定できます。

もしP端子に何もつながなかったら、Grasshopperが自動的にXY平面みたいなデフォルトの平面を基準にしてくれます。

でも、3D空間で斜めになったベクトル同士を比べるときは、ちゃんと平面を指定するか、3D空間での正確な角度を取る工夫が必要になってきます。

**Angleコンポーネントの主な端子**
– **入力AとB**: 角度を測りたい2つのベクトルをつなぐ
– **入力P**: 測定の基準になる平面(省略できるけど、3D空間では注意が必要)
– **出力A**: 2つのベクトル間の角度(ラジアンで出てきます)
– **出力R**: 優角(180度より大きい方の角度)

角度データの注意点とラジアンから度数への変換

Angleコンポーネントで角度を測ったとき、一番気をつけないといけないのが「出てくる角度の単位がラジアンになってる」ということです。

私たちが普段使っている角度は「度数(0度〜360度)」ですよね。

でもGrasshopperの内部計算では「ラジアン(0〜2π)」という単位が使われているんです。

だから、そのままの数値を別のコンポーネントに入れちゃうと、想定していたのとは全然違う、すごく小さな回転しか起きないというトラブルに遭遇しちゃいます。

この単位の違いによる失敗は、Grasshopperを学び始めた人のほとんどが一度は経験する「あるある」なんです。

このラジアンと度数を変換するために、Grasshopperには専用の「Degrees」コンポーネントと「Radians」コンポーネント(Math > Trigタブの中)が用意されています。

取得したラジアンの角度データをDegreesコンポーネントに入れるだけで、私たちが慣れている30度とか45度っていう数値に一瞬で変換できます。

パネル(Panel)で確認すれば、ちゃんと度数で表示されるので安心です。

入力端子を右クリックして「Degrees」にチェックを入れることでも変換できますが、後から見直したり他の人と共有したりすることを考えると、ちゃんとDegreesコンポーネントをキャンバスに置いてつなぐ方が分かりやすくて親切です。

もう1つ意識しておきたいのが、取得した角度が常に「正の値」で返ってくるのか、それとも向きによって「プラスマイナスの符号」がつくのかという点です。

単純に開き具合を知りたいだけなら絶対値で問題ないんですが、特定の平面を基準にして「右回り」か「左回り」かという回転の方向まで制御したいときは、クロス積(外積)なども使ってベクトルの関係をもっと深く調べる必要があります。

これができると、部材が内側に折れるのか外側に開くのかといった、細かい方向制御ができるようになって、意図しない形の反転を防げます。

好きな軸を中心に回転させるコンポーネント

Grasshopperで、XYZの基本軸(ワールド座標軸)を中心にした回転は比較的簡単にできます。

でも、「自分で決めた軸を中心に回転させたい」となると、使うコンポーネントや平面の考え方をもう一段階レベルアップさせる必要があります。

たとえば、空間に斜めに配置された線を回転軸にして、別の形やベクトルを回転させたい場合、普通の「Rotate」コンポーネントだと基準の平面がXY平面に固定されちゃうので、思った通りの斜め回転ができないんです。

こういう複雑な3次元の回転を実現するには、回転の基準になる「軸(Axis)」を自由に決められる専用の回転コンポーネントを選んで、適切なベクトルデータと角度データをつなぐ必要があります。

自分で決めた軸を中心に回転させるとき、Grasshopperでよく使われるのが「Rotate 3D」コンポーネント(Transform > Euclideanタブの中)、または「Vector Around Axis」コンポーネントです。

Rotate 3Dは、「G」端子に回転させたい形(点、線、サーフェスなど)をつないで、「A」端子に回転角度(ラジアン)、そして「X」端子に回転の中心になる軸(ラインまたはベクトル)をつなぐ仕組みになっています。

この「X」端子に、空間上の好きな2点を結んだラインや、サーフェスから取得した法線ベクトルなどを入れることで、世界座標に縛られない自由な角度と方向を持った回転や形の生成ができるようになります。

**任意の軸回転に使うコンポーネントの使い分け**
– **Rotate**: 指定した平面上での2D的な回転に使う(デフォルトはXY平面)
– **Rotate 3D**: 3D空間の好きな線やベクトルを「軸」にして、形を回転させる
– **Vector Around Axis**: 形じゃなくて「ベクトルそのもの」を好きな軸を中心に回転させる

これらのコンポーネントを使うとき、回転の起点になる「中心点」の扱いに注意が必要です。

ベクトルを軸として指定する場合、ベクトル自体には位置情報が含まれていない(単なる向きと大きさのデータ)ので、Rotate 3Dコンポーネントでは、回転軸になるベクトルの基点(どこを中心に回るのか)をちゃんと設定しないと、オブジェクトが予想外の遠い場所に飛んでいっちゃうことがあります。

だから、Line(線分)を軸として入力するか、あらかじめ回転の基点になるPoint(点)をしっかり決めて、そこから伸びるベクトルとしてシステムに認識させることが、正確なパラメトリックモデリングを成功させるための大事なポイントになります。

角度測定から任意軸回転まで、つなげて使う実践テクニック

ここまで説明してきた「2つのベクトル間の角度測定」と「好きな軸を中心にした回転」は、それぞれ単独でも使えますが、両方を組み合わせることで、すごく実用的でダイナミックなGrasshopperのアルゴリズムを作ることができます。

よくある実践例としては、「あるオブジェクトAが、動いている別のオブジェクトBの方向を常に自動で追いかけて向くようにする」といった、追従システムや関節の動きのシミュレーションがあります。

こういうシステムを作るには、今の向きのベクトルと目標の向きのベクトルの角度差をリアルタイムで取得して、その角度分だけ特定のヒンジ(好きな軸)を中心にオブジェクトを回転させる、という一連のデータの流れをエラーなく組み立てる必要があります。

具体的なデータの流れはこんな感じです。

まず、対象になる2つのポイント間の座標を引き算して、今の向きを示すベクトルを作ります。

それをAngleコンポーネントに入れて、目標のベクトルとの「角度差」を取り出します。

このとき、さっき説明した通り出てくる角度はラジアン単位なので、必要に応じて角度変換をして、最終的に回転処理にデータを渡します。

次に、その回転をどの軸を中心に行うかを決めるために、2つのベクトルに直交する新しいベクトルを「Cross Product(外積)」を使って計算します。

この外積で出てきた法線ベクトルこそが、2つのベクトルを含む平面に対して垂直に立つ「理想的な回転軸」になります。

これをRotate 3Dなどの軸端子につなぐことで、最短距離で目標の向きへと回転する無駄のない軌道が完成するんです。

**角度測定から任意軸回転までの具体的な手順**
1. **ステップ1**: 今の向きのベクトルと、目標の向きのベクトルの2つを用意する
2. **ステップ2**: Angleコンポーネントで、2つのベクトル間の角度(ラジアン)を取得する
3. **ステップ3**: Cross Productコンポーネントで2つのベクトルの外積を計算して、直交する「回転軸」を作る
4. **ステップ4**: Rotate 3DまたはVector Around Axisを使って、取得した角度と軸で回転を実行する

こんな風に、Grasshopperでのベクトルの扱いは、単なる数値計算を超えて、3D空間の形を幾何学的に、そして論理的にコントロールするための強力な道具になります。

角度の取得と好きな軸を中心にした回転のメカニズムをしっかり理解して、それを外積や平面の考え方と組み合わせることで、どんなに複雑な曲面上のパネル配置や、ロボットアームみたいな多関節のシミュレーションでも、思い通りにコントロールできるようになります。

最初はコンポーネントの入出力やラジアン変換に戸惑うかもしれませんが、今回紹介したデータの流れを意識してキャンバスを作っていけば、パラメトリックデザインの自由度はぐっと上がっていくはずです。

ぜひ試してみてください!

広告