27
Help us understand the problem. What are the problem?

posted at

updated at

3次元座標系での様々な回転表現を相互変換したり、表示するツール

作ったもの

  • 下記の3D回転表現に対応しています
    • 回転行列: Rotation Matrix
    • 回転ベクトル: Rotation Vector
    • Axis-angle
    • クオータニオン: Quaternion
    • オイラー角: Euler Angles (Intrinsic; Mobile)
    • 固定角: Euler Angles (Extrinsic; Fixed)
  • 入力の回転に応じて、物体がどの方向を向くかを3D空間上で表示します
  • 入力の回転を、他の全ての3D回転表現に変換します
  • GitHub

実行ファイル

  • 下記リリースからご使用のOSに合わせた実行ファイルをダウンロードしてください
    • https://github.com/iwatake2222/rotation_master/releases/latest
      • Windows 10/11 64-bit: rotation_master_windows-2019_x64.zip
      • Linux (Ubuntu 20.04): rotation_master_ubuntu-20.04_x64.tgz
      • MacOS: rotation_master_macos-10.15.tgz
      • 注意
        • Windowsだと実行時にセキュリティに関する警告が出ます。信用いただけるならそのまま実行してください
        • Ubuntuの場合 apt install -y libglu1-mesa-dev mesa-common-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev が必要です
        • WSL2だとグラフィック系の問題で動作しませんでした。WSL2上のDocker(Ubuntu20.04)だと動作しました
        • MacOSだと実行時にエラーが発生するようです。自分でビルドするか、何か足りていないライブラリをインストールしたらいけるかも?
  • セキュリティが気になる場合は、自分でビルドしてください

操作方法

image.png

変換

  1. Inputエリアで、数値を変更します
    • マウスドラッグ、または、Ctrl+クリックで直接入力します
  2. 値を変更した3D回転表現が入力として自動的に選ばれますが、変えたい場合はラジオボタンをクリックしてください
  3. Converted valuesエリアに、結果が自動的に出力されます

カメラ操作

Revolutionモード

  • カメラは原点の周回を移動します。カメラは常に原点の方向を向いています
  • 右ドラッグ: カメラの位置回転
  • スクロール: カメラの前後移動 (原点からの距離変更)

Freeモード

  • カメラを自由に移動することができます
  • 右ドラッグ: カメラの回転
  • 中央ドラッグ: カメラの移動
  • スクロール: カメラの前後移動

その他

  • 画面の右側に、X, Y, Z軸それぞれから見た状態が表示されます
  • 現在の変換結果(Converted Values)を入力値(Input)に設定したい場合は、"Overwrite input values by the converted values" ボタンをクリックします

技術的な話

変換の流れ

  1. 入力値を回転行列に変換する
    • ConvertOOO2RotationMatrix
  2. 変換した回転行列から、全ての3D回転表現に変換する
    • ConvertRotationMatrix2OOO

変換関数は下記で実装されています。依存は自前の小さいMatrixクラス(2ファイル)だけなので、マイコンなどへの移植も容易だと思います。
https://github.com/iwatake2222/rotation_master/blob/master/desktop/transformation_matrix/rotation_matrix.cpp

使用技術

  • C++
  • OpenGL + GLFW + GLEW
  • Dear ImGui

Help

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
27
Help us understand the problem. What are the problem?