[ 前へ | 目次 | 次へ ]

座標系のオイラー角姿勢制御

これまで扱ってきた座標系の回転や自転は、 現在の座標系の姿勢を基準に、 追加的に回転する方法でした。しかし場合によっては、 座標系の姿勢を直接的に制御したい場合もあります。 ここでは、そのような座標系の姿勢制御について扱います。


Z-X-Z系オイラー角

Z-X-Z系オイラー角

3次元座標系の姿勢を表現するには、オイラー角の概念が必要です。 オイラー角は、座標系の姿勢を3つの特別な角度で表現する方法です。 オイラー角の扱いや解釈に関しては、分野や書籍によって様々なものがありますが、 ここでは工学分野などで一般的なZ-X-Z系オイラー角について解説します。

オイラー角で用いる3つの角度を、 それぞれα、β、γとします。 このとき、Z-X-Z系オイラー角では、 座標系の姿勢は次のようにして決定されます。 最初に、座標系をZ軸のまわりにαだけ自転させます。 続いて、X軸のまわりにβだけ自転させます。 最後に、またZ軸のまわりにγだけ自転させます。 これで座標系の姿勢が決まります。

オイラー角の弱点

α、β、γの値を決定すると、座標系の姿勢はただ一通りに定まります。 しかし、必ずしもその逆は言えない事に注意が必要です。 つまりある座標系の姿勢に対して、 対応するα、β、γの組が無数に存在する場合があります。 つまりオイラー角にとっては苦手な姿勢というものが存在し、 それがしばしば思わぬ不具合の原因となってしまう場合があります。 例えば非常に有名な問題として、ジンバルロックというものが知られています。

こうした弱点を回避するためには、 オイラー角のみを使用するのでは無く、 適材適所でrotCoordinate関数やspinCoordinate関数など、 任意軸まわりの回転を使用する事が有効です。

座標系の姿勢制御

オイラー角による姿勢の指定

座標系の姿勢をオイラー角で指定するには、 setCoordinateAngle関数を使用します。

- 関数仕様 -

int setCoordinateAngle (
  int coordinateID,
  float alpha, float beta, float gamma
)

最初の引数coordinateIDでは、設定対象の座標系のIDを指定します。 続く引数alphaでZ-X-Z系オイラー角の第一角を、 同様にalphaで第二角を、gammaで第三角を指定します。

オイラー角の取得

座標系の姿勢からオイラー角を取得するには、 getCoordinateAngle、getCoordinateAngle、getCoordinateAngle 関数を使用します。

- 関数仕様 -

float[ ] getCoordinateAngle ( int coordinateID )

この関数は、座標系のZ-X-Z系オイラー角を配列で返します。 配列には [0] に第一角α、[1] に第二角β、[2] に第三角γが格納されています。 引数coordinateIDには、取得対象の座標系のIDを指定します。

なお、上でも述べた通り、同じ姿勢を現すオイラー角の組は複数存在します。 この関数は、あくまでその組の内のどれかを返すという事に注意する必要があります。

プログラム例

実際にローカル座標系をワールド座標系の上に配置し、 こまのようにアニメーション的に回転させてみましょう。 区別しやすくするために、 ローカル座標系には小さめの座標軸モデルを、 ワールド座標系には大きめの座標軸モデルを配置します。

このプログラムを実行すると、黒い画面に座標軸モデルが表示されます。 座標軸モデルは大きいものがワールド座標系の上に、小さいものがローカル座標系の上に配置されています。

実行結果、角度を設定された座標系の図
実行結果
大きな座標軸と小さな座標軸が表示される。小さな座標系は、アニメーションで回転する。

ローカル座標系は、止まりかけのこまのような、複雑な動きをします。 Z軸をゆっくりと公転させているのが第一角αの効果、Z軸をゆらゆらと振動させているのが第二角βの効果、 座標系を高速にスピンさせているのが第三角γの効果です。


この階層の目次
[ 前へ | 目次 | 次へ ]
お知らせ

リニアングラフ3DのVCSSL用APIにカメラ制御関数を追加、回転アニメーションツールも同梱
2019年10月09日 - RINEARNでは10月9日にソフトウェアの最新版をリリースしました。VCSSLのAPI関数の追加や、リニアングラフ3Dのアニメーションツールの追加など行っています。その概要をお知らせします。

小型関数電卓 RINPn(旧称リニアンプロセッサー nano)の公式ページを開設
2019年10月02日 - 現在オープンソースで開発中の、「シンプル&コンパクト」を目指した小型プログラマブル関数電卓ソフト「 RINPn 」の公式ページが、RINEARNサイト内にオープンしました。その概要をお知らせします。

Vnanoの公式サイトがオープン、チュートリアルやAPI仕様書等も掲載
2019年08月07日 - オープンソースのアプリケーション組み込み用スクリプトエンジン「 Vnano 」の公式サイトを開設しました。チュートリアルや、スクリプトエンジンのAPI仕様書などが参照できます。その概要をお知らせします。

新着
3Dグラフを回転アニメーションさせるツール

3Dグラフを、Z軸まわりにゆっくりと回転アニメーションさせるツールです。全角度のグラフを、連番の画像ファイルに保存する事もできます。
2019年10月09日
[公式ガイドサンプル] ユーザーのGUI操作に対して処理を行う

「VCSSL GUI開発ガイド」内のサンプルコードです。ユーザーがGUIを操作した際に行う処理を実装します。
2019年07月28日
[公式ガイドサンプル] 各種GUIコンポーネントを画面上に配置する

「VCSSL GUI開発ガイド」内のサンプルコードです。色々な種類のGUI部品を画面上に配置します。
2019年07月28日
連番ファイルから3Dグラフをアニメーション描画するツール

フォルダ内の連番データファイルを読み込み、3Dグラフを高速で連続描画して、アニメーションさせるツールです。グラフを連番の画像ファイルに保存する事もできます。
2019年06月03日
連番ファイルから2Dグラフをアニメーション描画するツール

フォルダ内の連番データファイルを読み込み、2Dグラフを高速で連続描画して、アニメーションさせるツールです。グラフを連番の画像ファイルに保存する事もできます。
2019年05月24日
開発元Twitterアカウント