[ 前へ | 目次 | 次へ ]

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

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

スポンサーリンク


オイラー角

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軸をゆらゆらと振動させているのが第二角βの効果、 座標系を高速にスピンさせているのが第三角γの効果です。



スポンサーリンク



この階層の目次
[ 前へ | 目次 | 次へ ]
RINEARN からのお知らせ
※ VCSSL は RINEARN が開発しています。

リニアングラフやVCSSLの最新版をリリース、目盛りの位置や内容を自由に指定可能に!
2024-11-24 - リニアングラフ3D/2Dを更新し、自由な位置に、自由な表記内容の目盛りを描けるようになりました! 併せて、Java言語やVCSSLでの、プログラム制御用APIも拡張しています。詳細をお知らせします。

Exevalator 2.2 をリリース、TypeScript 対応によりWebブラウザ上で動作可能に
2024-10-22 - オープンソースの式計算ライブラリ「Exevalator(エグゼバレータ)」の2.1をリリースしました。新たに TypeScript に対応し、Webブラウザ上での式計算にも使えるようになりました。詳細を解説します。

アシスタントAI作成の舞台裏(その2、作成編)
2024-10-12 - アシスタントAIの作成方法解説の後編です。実際にChatGPTの「GPTs」機能を用いて、アシスタントAIを作成する手順や、独自の知識をもたせたり、精度を出すためのノウハウなどを解説しています。

アシスタントAI作成の舞台裏(その1、基礎知識編)
2024-10-07 - アシスタントAI作成方法解説の前編です。今回はまず、アシスタントAIを作る前に抑えておきたい、基礎知識を延々と解説しています。そもそもLLM型AIとはどんな存在か? RAGとは何か? 等々です。

ソフトの利用をサポートしてくれるアシスタントAIを提供開始!
2024-09-20 - RINEARN製ソフトの使い方の質問応答や、一部作業のお手伝いをしてくれる、アシスタントAIを提供開始しました。ChatGPTアカウントさえあれば、誰でも無料で使用できます。使い方を解説します。

Exevalator 2.1 をリリース、新たに Visual Basic に対応
2024-07-28 - オープンソースの式計算ライブラリ「Exevalator(エグゼバレータ)」の2.1をリリースしました。今回から、新たに Visual Basic(VB.NET)でも使用できるようになりました。詳細を解説します。

関数電卓 RINPn(りんぷん)、Esc キーで計算式の一発クリアが可能に
2024-07-20 - 関数電 RINPn の Ver.1.0.2 をリリースしました。今回から、キーボードの「 Esc 」キーを押すと、入力中の計算式を一発でクリアできるようになりました。詳細を解説します。

Exevalator 2.0 をリリース、互換性に注意が必要なバグ修正が 1 件
2024-07-14 - オープンソースの式計算ライブラリ「Exevalator (エグゼバレータ)」の2.0をリリースしました。今回の更新では、互換性に注意を要する 1 件のバグ修正があります。詳細を解説します。

各ソフトウェアをアップデート、リニアングラフのコマンド拡張やVCSSLの英語対応など
2024-02-05 - 各ソフトの一斉アップデートの内容をお知らせします。今回は、リニアングラフのコマンド機能を大幅拡張したのがメインです。また、VCSSLのメッセージ類の英語対応も行いました。

Vnano の Ver.1.1 で実装した反復計算高速化の内側
2024-01-17 - 前回のお知らせ記事の続編です。スクリプトエンジン Vnano の Ver.1.1 において実施した高速化を、エンジン内部の実装面から掘り下げて解説します。

新着
[公式ガイドサンプル] 各種の図形や画像を描画する

「VCSSL 2DCG開発ガイド」内のサンプルコードです。図形や画像などを描画します。
2022-12-16
角度の「度」とラジアンとを相互変換し、図示もするツール

45度などの「度」の値と、ラジアンの値とを相互に変換できるツールです。対応する角度の図示もできます。
2022-11-22
[公式ガイドサンプル] 立体モデルを回転させるアニメーション

「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルを、アニメーションで回転させ続けます
2022-11-18
[公式ガイドサンプル] 立体モデルを回転させる

「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルを、指定した角度だけ回転させます。
2022-11-17
[公式ガイドサンプル] 四則演算の計算順序や、カッコを使った順序指定

「VCSSLスタートアップガイド」内のサンプルコードです。四則演算が計算される順序や、カッコを使って順序を指定する方法を例示します。
2022-10-31