grasshopperのOrientコンポーネントの使い方

Grasshopper

とっても便利なコンポーネントです。

前回のこの記事で,局所座標系でものを配置することについて説明しましたが,今回は局所座標系でものを作るのではなくて

この記事ではある座標系Aからある座標系Bへ物とその姿勢を移動させたい。
といった場合について考えます。

たとえばこんな感じにStanford Bunnyを並べるのも,Stanford Bunnyというジオメトリとそれを定義するPlaneが存在していれば、

こんな感じで,上の絵が表現できます。曲線に沿って外側をウサギが向いているのは,局所座標系のX方向がつねに曲線の分割点の接線方向になるように設定しているからです。

Orientコンポーネントの使い方

入力は

  • G:変換したいGeometry
  • A:Geometryの基準となるPlane
  • B:移動させたい局所座標を表現するPlane

となっています。ここで、変換前のGeometryのある点Pの座標を座標系Aから読んだ値と,変換後のGeometryのある点Pの座標系Bから読んだ座標値は同じになるということです。

同次変換行列を使ってモノの移動を表現してみる。

同次変換行列を使えばこのコンポーネントは簡単に理解できます。

ある基準座標系(ここではworldと表記します)でのGeometryの姿勢\begin{bmatrix}  ^{world}T_{Geo} \end{bmatrix} は,任意の座標系Aでの姿勢 \begin{bmatrix}  ^{A}T_{Geo} \end{bmatrix} との関係は次の式で表されます。

(1)   \begin{equation*}\begin{bmatrix} ^{world}T_{Geo} \end{bmatrix} = \begin{bmatrix} ^{world}T_{A}\end{bmatrix}\begin{bmatrix} ^{A}T_{Geo}\end{bmatrix}\end{equation*}

ここで \begin{bmatrix}  ^{world}T_{A} \end{bmatrix} がworldとAとの関係を表しています。

Planeは基本的に基準座標系に対して定義するので、任意の座標系Bとの関係も
\begin{bmatrix}  ^{world}T_{B} \end{bmatrix}と表せます。BからAへの変換行列は


(2)   \begin{equation*}\begin{bmatrix} ^{B}T_{A} \end{bmatrix} = \begin{bmatrix} ^{world}T_{B}\end{bmatrix}^{-1}\begin{bmatrix} ^{world}T_{A}\end{bmatrix}\end{equation*}

となります。

ごちゃごちゃRotateやMoveするくらいなら変換行列を考えた方が早い

Rotateは回転行列(4×4の同次変換行列の左上3×3成分)Moveは同次変換行列の4列目の成分に相当するので、変換しまくりでGrasshopperのプログラムがスパゲッティになってしまう~という方は一度、
考えてみるとよいソリューションがあるかもしれません!(知らんけど)

コメント

タイトルとURLをコピーしました