Main Content

hgtransform によってサポートされる変換

オブジェクトの変換

変換オブジェクトの Matrix プロパティにより、オブジェクトのすべての子オブジェクトに対して同時に変換が適用されます。変換には回転、平行移動、スケーリングがあります。4 行 4 列の変換行列を使用して、変換を定義します。

変換行列の作成

関数 makehgtform は回転、平行移動、拡大縮小を実行するための行列の構築を簡略化します。makehgtform を使用した変換行列の作成の詳細については、変換の入れ子による複合移動を参照してください。

回転

回転変換では、右手の法則に従い、x 軸、y 軸または z 軸を中心とし、各軸に沿って原点を見た場合に反時計回りの方向を正の角度として、オブジェクトを回転します。回転の角度が θ の場合、次の行列は X 軸の周りに θ 回転することを定義します。

任意の軸に対して回転する変換行列を作成するには、関数 makehgtform を使用します。

平行移動

平行移動はオブジェクトを現在の位置から移動する変換です。平行移動はデータ空間の単位で距離 txtytz として指定します。以下の行列は変換行列でこれら要素の位置を示します。

スケーリング

拡大縮小変換はオブジェクトのサイズを変更します。倍率 sxsysz を指定し、以下の行列を作成します。

0 以下の倍率を使用することはできません。

既定の変換

既定の変換は、関数 eye で作成できる単位行列です。その単位行列は以下のとおりです。

詳細は、変換操作を元に戻すを参照してください。

許可されていない変換: 透視投影

透視投影変換は、オブジェクトを表示する距離を変更します。次の行列は、MATLAB® グラフィックスで許可されていない透視投影変換行列の例です。

[10000100001000px0]

この場合、px が透視投影係数です。

許可されていない変換: 傾斜

傾斜変換は、所与のライン (または 3 次元座標における平面) に沿ったすべての点を固定したままにすると同時に、他のすべての点を、固定ライン (平面) からのそれらの垂直距離に比例したライン (平面) と平行に移動します。次の行列は、hgtransform で許可されていない傾斜変換行列の例です。

[1sx00010000100001]

この場合、sx が傾斜係数であり、単位行列内の任意のゼロ要素を置き換えることができます。

絶対変換と相対変換

変換は、現在の変換に対して相対的な式ではなく、絶対的な式で指定されます。たとえば、この変換オブジェクトを x 方向に 5 単位平行移動する変換を適用してから、y 方向に 4 単位平行移動する別の変換を適用すると、結果のオブジェクトの位置は元の位置から y 方向に 4 単位平行移動した位置になります。

変換を重ねる場合には、個別の変換を結合して 1 つの行列にしなければなりません。詳細は、変換を 1 つの行列に結合を参照してください。

変換を 1 つの行列に結合

通常、個々の行列を結合 (乗算) して、Matrix プロパティを結果に設定し、多様な変換操作を 1 つの行列に結合することは効率的です。行列の乗算は可換ではないので、行列を乗算する順番は結果に影響します。

たとえば、拡大縮小、平行移動、回転操作を実行すると仮定します。RTS が変換行列であると仮定して、これらの行列を次のように乗算します。

C = R*T*S % operations are performed from right to left

ここで、S はスケーリング行列で、T は平行移動行列、R は回転行列、C はこれら 3 つの操作の合成です。次に、変換オブジェクトの Matrix プロパティを C に設定します。

hg = hgtransform('Matrix',C);

変換と単位行列の乗算

以下のステートメントは互いに等価ではありません。まず、1 番目のステートメントを設定します。

hg.Matrix = C;
hg.Matrix = eye(4);

これは変換 C を削除します。次に、2 番目のステートメントを設定します。

I = eye(4);
C = I*R*T*S;
hg.Matrix = C;

これは変換 C を適用します。単位行列を他の行列と結合しても合成行列には影響しません。

変換操作を元に戻す

変換操作は (現在の変換に対して相対項ではなく) 絶対項で指定されるので、現在の変換を単位行列に設定することで一連の変換を元に戻すことができます。以下に例を示します。

hg = hgtransform('Matrix',C);
...
hg.Matrix = eye(4);

これは変換 C を適用する前に、変換オブジェクト hg をそれらの向きにすることで含まれるオブジェクトを返します。

単位行列についての詳細は、関数 eye を参照してください。

参考

| |

関連するトピック