noocyte のプログラミング研究室 〜プログラムは楽しげに走らねばならない♪〜

3次元の回転 (原点を通る任意方向の回転軸まわり)
― 座標系に依存しないベクトル表現と回転行列 ―

公開:2008/06/10(火)
最終更新:2013/01/01(火)
注意

0.目次

  1. 問題
  2. 解答
    1. 記号の定義
    2. ベクトルによる表現 (座標系非依存)
    3. 回転行列による表現 (正規直交座標系限定)
    4. 四元数 (クォータニオン) による表現 (研究中)
  3. 参考・関連図書
  4. サイト内関連ページ
  5. 外部へのリンク
  6. 更新履歴

1.問題

3次元空間内において,原点を通る任意方向の回転軸のまわりに 点を角度θだけ回転させたときの位置を求めよ.


2.解答

2.1 記号の定義

画像:3次元の回転
  • O:原点
  • OA:回転軸
  • P:回転前の点の位置
  • P':回転後の点の位置
  • Q:点 P を含む回転面と回転軸の交点
  • a:回転軸の方向・向きを表す単位ベクトル
  • θ:回転角
    回転方向は,座標系が右手系ならば a に対して右ネジの向き,左手系ならば左ネジの向きとする.
  • p ≡ O→P
  • p' ≡ O→P'
  • u ≡ Q→P
  • v ≡ a × u
    (u を +90°回転させたベクトル)
    注意:右手系と左手系では外積の向きの定義が逆になる.

2.2 ベクトルによる表現 (座標系非依存)

O→Q は単位ベクトル a に対する p の平行成分,u は垂直成分なので,

数式:O→Q ……………………………………… (2.2.1)
数式:u ………………… (2.2.2)

v は定義より,

数式:v …………………(2.2.3)

a⊥u かつ |a|=1 なので,|u|=|v| である点に注意.

以上と u⊥v であることを考慮すると,回転後の位置 p' は2次元の回転の式を使って次のように書けることは明らか.

数式:p' …………………(2.2.4)

ねっ,簡単でしょ?


なお,以上の計算式は座標系の取り方には依存しないので, 直交座標 (デカルト座標)でなくても (斜交座標極座標 (円柱座標,球座標など) でも) 使用できる. ただしにも描いたとおり,座標系の掌性 (chiralityキラリティカイラリティ:右手系と左手系の区別) により回転方向の定義が逆になる点に注意.
(そうなる理由は,右手系と左手系では外積の向き (図の v の向き) の定義が逆になるから.)

■参考 (Wikipedia の掌性関連項目)

2.3 回転行列による表現 (正規直交座標系限定)

今までの計算式は座標系の取り方に依存しなかったが,ここから先は正規直交座標系限定.
(よく知られている外積の成分の計算式が正規直交座標系を前提としているため.)

ベクトルはベクトル,t を転置とする.例えば,

数式:ベクトルaとaの転置

また行列 [a×] を,任意のベクトル a,p について次式が成り立つように定義する.
("[a×]" はここで勝手に定義する記号なので,よそを探してもないよ.)
(2008/08/17(日) 追記:外積行列 (cross-product matrix) というらしい.)

数式:行列[a×]の定義1 …………………(2.3.1)

つまり,

数式:行列[a×]の定義2 …………………(2.3.2)

これを用いると,(2.2.4) は次のように書ける.

数式:p' …………………(2.3.3)
(I3 は3次の単位行列)

したがって回転行列 R(a, θ) は次のようになる.

数式:回転行列 …………………(2.3.4)

成分で書けば次のとおり.

数式:回転行列の成分 …………………(2.3.5)
ijクロネッカーのデルタ,εikjエディントンのイプシロン.)

(余談:英語版 Wikipedia には,εijk を3次行列 (3次行列ではない) で表現したがある.
また,εijk と δij の面白い関係式も載っている.)


なお,この行列を同次座標用に拡張したものは, OpenGLglRotate (glRotatef, glRotatex) 関数でも用いられている. また DirectX の XMMatrixRotationAxis / XMMatrixRotationNormal (DirectXMath / XNA Math) や D3DXMatrixRotationAxis (D3DX) もこの行列を返すはず.

OpenCV では cv::Rodrigues().(2015/12/26(土) 追記)

時々「4次元 回転(行列)」などで検索して来る人がいるけど, 4次元空間の幾何学について考えている人がそんなにいるとは思えない. 3DCG に使うつもりで検索しているんだとしたら,まず間違いなく3次元の同次座標 (4成分) を4次元と勘違いしてるんだろう.

本当の4次元の回転について知りたい人は↓こっち.


2008/06/18(水) 追記

ロドリゲスの回転公式 (Rodrigues' Rotation Formula) というらしい.


2008/08/17(日) 追記

エディントンのイプシロンを用いた式は, 3次元外積の成分を統一的に表現することができるので代数的に扱うには都合がよい. しかし数値計算 (CG を含む) では, 無駄に積和演算と多次元配列のアクセスを増やすので遅い. クロネッカーのデルタについても同様. sinθ [a×] と cosθ I3 の非零要素だけを個別に加算するようハードコードする方がよい.


2010/02/27(土) 追記

ベクトルの回転 (物理のかぎしっぽ) より引用.

注)有限回転の式を,ロドリグの公式と呼びましたが, この式を導いたのはロドリグではないという説が有力です. この式自体は,実はもっと昔から知られていたようなのですが, ベクトルという概念がまだ無かったので,違った説明のされかたをされていました. ベクトルという概念を前面に押し出して,この公式を初めて導いたのはギブスのようです. こういった事情により,ロドリグの公式という言い方を避けて, ベクトルの回転公式などと呼ぶ人もいるようですが, 未だに定着している名前はありません.

■関連

ハミルトン (Hamilton) が発見した四元数から, 熱力学で有名なギブス (Gibbs) と,電気回路理論や演算子法で有名なヘヴィサイド (Heaviside) がそれぞれ独立にベクトル解析という分野を開拓したエピソード. (ちなみにホイートストン・ブリッジ回路で有名な Sir Charles Wheatstone はヘヴィサイドの叔父.)

2.4 四元数 (クォータニオン) による表現

(研究中)

3.参考・関連図書

【送料無料】AndroidゲームプログラミングA to Z

楽天で買う
価格:4,830円(税込、送料別)

Androidゲームプログラミング A to Z
Mario Zechner
インプレスジャパン
売り上げランキング: 26792



キーポイント行列と変換群 (理工系数学のキーポイント (8))
梁 成吉
岩波書店
売り上げランキング: 279365
おすすめ度の平均: 5.0
5 素晴らしい本です。ぜひ1冊持っていたい本です。
5 群論への橋渡しに。
5 群論への橋渡しに。
5 群論の入門、線形代数の応用の学習に最適



3D‐CGプログラマーのためのクォータニオン入門―「ベクトル」「行列」「テンソル」「スピノール」との関係が分かる! (I・O BOOKS)
金谷 一朗
工学社
売り上げランキング: 151249
おすすめ度の平均: 3.0
2 クォータニオンの本?
4 7章だけ別次元
2 非常に難解だと思います。
3 本書だけでクォータニオンを理解するのは難しいと思う
4 クォータニオンを用いた3次元回転入門の適書



ハミルトンと四元数―人・数の体系・応用
堀 源一郎
海鳴社
売り上げランキング: 382190
おすすめ度の平均: 4.0
4 実務に役立てる!! 強引に...



微分幾何学と接続

楽天で買う

価格:3,900円(税込、送料別)




【送料無料】3次元CG入門第2版

楽天で買う
価格:2,730円(税込、送料別)

C++による簡単実習 3次元CG入門
小笠原 祐治
森北出版
売り上げランキング: 285345

理論的な説明 + サンプルプログラム.




GLUTによるOpenGL入門―「OpenGL Utility Toolkit」で簡単3Dプログラミング! (I・O BOOKS)
床井 浩平
工学社
売り上げランキング: 53313
おすすめ度の平均: 4.0
4 いまどき
3 今から勉強するなら…買いである
4 WEB版とほぼ同じ
5 入門書としてオススメ♪


OpenGLによる3次元CGプログラミング
林 武文 加藤 清敬
コロナ社
売り上げランキング: 79965
おすすめ度の平均: 4.0
4 最初の1冊に最適
5 数値シミュレーション入門に。
5 3次元CGの教科書向け
3 あくまで入門書
4 入門用に


OpenGLプログラミングガイド 原著第5版
OpenGL策定委員会
ピアソンエデュケーション
売り上げランキング: 55645
おすすめ度の平均: 5.0
5 待望のバイブルついに OpenGL 2.0対応で帰ってきました
5 お勧めです!


OpenGL Programming Guide: The Official Guide to Learning OpenGL, Versions 3.0 and 3.1 (7th Edition)
Dave Shreiner The Khronos OpenGL ARB Working Group
Addison-Wesley Professional
売り上げランキング: 6786


OpenGLで作るiPhone SDKゲームプログラミング
横江 宗太(株式会社パンカク)
インプレスジャパン
売り上げランキング: 1635
おすすめ度の平均: 5.0
5 OpenGL ES に一歩近づけてくれる一冊です
5 iPhoneのOpen GLの最初の足がかりに
5 ヒントが沢山の良書です


【送料無料】初めてのOpenGL ES [ 山下武志 ]

楽天で買う
価格:2,940円(税込、送料別)

初めてのOpenGL ES
初めてのOpenGL ES
posted with amazlet at 12.12.09
山下 武志
オライリージャパン
売り上げランキング: 85713



OpenGL ES 2.0 プログラミングガイド
Aaftab Munshi Dan Ginsburg Dave Shreiner アフタブ・ムンシ ダン・ギンズバーグ デーブ・シュライナー
ピアソンエデュケーション
売り上げランキング: 5269
おすすめ度の平均: 5.0
5 お勧めです



DirectX ゲームグラフィックス プログラミング Ver. 2.1 Vista [NextCreator] (NEXT CREATOR)
N2Factory
ソフトバンククリエイティブ
売り上げランキング: 193706
おすすめ度の平均: 4.5
4 わかりやすいです
3 初心者には良い内容です
5 分かりやすい
5 とても良い入門書
5 非常にわかりやすい


DirectX9 DirectX Graphics (I・O BOOKS)

工学社
売り上げランキング: 203036
おすすめ度の平均: 4.0
4 DirectX9 December 2004版
4 初心者向け


DirectX9必携
DirectX9必携
posted with amazlet at 10.06.12
鎌田 茂雄
Northbrain
売り上げランキング: 9949
おすすめ度の平均: 4.0
3 わかっている人向けのリファレンス本
5 新500の極意



Game Programming Gems
Game Programming Gems
posted with amazlet at 09.12.23
Mark DeLoura 川西 裕幸 狩野 智英
ボーンデジタル
売り上げランキング: 56751
おすすめ度の平均: 4.5
5 様々な技法が載ってます
4 Graphics Gemsの後継書
5 やや敷居は高いかも
4 日本のゲームプログラマーを目指す人に一冊


Game Programming Gems 2 日本語版
Mark DeLoura 川西 裕幸 狩野 智英 鳥海 有紀
ボーンデジタル
売り上げランキング: 147427
おすすめ度の平均: 5.0
5 Game開発の辞書的な存在です


Game Programming Gems 3 日本語版
Dante Treglia 中本 浩 川西 裕幸
ボーンデジタル
売り上げランキング: 148533


Game Programming Gems 4 日本語版
Andrew Kirmse 中本 浩 川西 裕幸
ボーンデジタル
売り上げランキング: 157007


Game Programming Gems 5 日本語版
Kim Pallister
ボーンデジタル
売り上げランキング: 218804


Game Programming Gems 6 日本語版
Michael Dickheiser
ボーンデジタル
売り上げランキング: 190711


Game Programming Gems 7 日本語版
Scott Jacobs
ボーンデジタル
売り上げランキング: 188270



GPU Gems 日本語版―リアルタイムグラフィックスプログラミングのテクニック、ヒント、トリック
中本 浩
ボーンデジタル
売り上げランキング: 70836
おすすめ度の平均: 5.0
5 実用的な手法を、演算レベルから解説した良書


GPU Gems 2 日本語版 ‐ハイパフォーマンス グラフィックスとGPGPUのためのプログラミング テクニック‐


GPU Gems 3 日本語版
GPU Gems 3 日本語版
posted with amazlet at 09.12.23
Hubert Nguyen
ボーンデジタル
売り上げランキング: 29136



実例で学ぶゲーム3D数学
Fletcher Dunn Ian Parberry
オライリージャパン
売り上げランキング: 5010
おすすめ度の平均: 4.5
3 内容はいいのだが
5 類書との違いは具体的なコードが載っていること
5 タイトルに偽りなし



ゲーム開発のための数学・物理学入門  Beginning Math and Physics for Game Programmers
Wendy Stahler
ソフトバンククリエイティブ
売り上げランキング: 57346
おすすめ度の平均: 4.0
5 数学が嫌いなのにプログラマになった?
1 高校で習う内容
4 C言語と
3 導入書なので仕方ないとは思いますが・・・
5 3Dのゲームと数学



ゲームプログラミングのためのリアルタイム衝突判定
Christer Ericson
ボーンデジタル
売り上げランキング: 64052
おすすめ度の平均: 4.5
3 多くの情報への窓口となる本
5 実践的な衝突判定技術を広範囲にカバー
5 衝突最高!



【送料無料】内積・外積・空間図形を通してベクトルを深く理解しよう

楽天で買う
価格:1,575円(税込、送料別)




【送料無料】なっとくするベクトル

楽天で買う
価格:2,835円(税込、送料別)

なっとくするベクトル (なっとくシリーズ)
小野寺 嘉孝
講談社
売り上げランキング: 122943



【送料無料】なっとくする行列・ベクトル

楽天で買う
価格:2,835円(税込、送料別)

なっとくする行列・ベクトル (なっとくシリーズ)
川久保 勝夫
講談社
売り上げランキング: 172378



ベクトル・行列がビジュアルにわかる線形代数と幾何
江見 圭司 江見 善一
共立出版
売り上げランキング: 158714



【送料無料】行列とベクトルのはなし

楽天で買う
価格:2,100円(税込、送料別)

行列とベクトルのはなし―線形代数の基礎
大村 平
日科技連出版社
売り上げランキング: 248023



【送料無料】細野真宏のベクトル「平面図形」が本当によくわかる本

楽天で買う
価格:1,155円(税込、送料別)




【送料無料】細野真宏のベクトル「空間図形」が本当によくわかる本

楽天で買う
価格:1,155円(税込、送料別)




【送料無料】志田晶のベクトルが面白いほどわかる本

楽天で買う
価格:1,365円(税込、送料別)

決定版 志田晶の ベクトルが面白いほどわかる本
志田 晶
中経出版
売り上げランキング: 43835












イラスト・図解 はじめての行列とベクトル
長谷川 勝也
技術評論社
売り上げランキング: 220444



【送料無料】なるほど高校数学ベクトルの物語

楽天で買う
価格:788円(税込、送料別)

なるほど高校数学 ベクトルの物語 (ブルーバックス)
原岡 喜重
講談社
売り上げランキング: 229182



【送料無料】なるほど高校数学三角関数の物語

楽天で買う
価格:788円(税込、送料別)

なるほど高校数学 三角関数の物語 (ブルーバックス)
原岡 喜重
講談社
売り上げランキング: 158574



【送料無料】いかにして問題をとくか第11版

楽天で買う
価格:1,575円(税込、送料別)

いかにして問題をとくか
G. ポリア
丸善
売り上げランキング: 41

4.サイト内関連ページ


5.外部へのリンク (敬称略)


6.更新履歴

このページの主な更新は Blog でお知らせします.

  1. 2008/06/08(日) 作成開始
  2. 2008/06/10(火) 公開
  3. 2008/06/15(日) タイトル変更
  4. 2008/06/18(水) ロドリゲスの回転公式について追記.
  5. 2008/08/17(日) 数値計算に関する注意外積行列に関する追記.
  6. 2008/09/05(金) 参考・関連図書を追加.
  7. 2009/02/05(木) 左手系の場合の図を追加.
  8. 2010/02/27(土) 回転公式の名称について追記
  9. 2010/06/12(土) 参考・関連図書を追加.
  10. 2011/11/03(木) 参考・関連図書を追加.
  11. 2012/12/09(日)
    • 回転の計算式の座標系依存性に関する記述を追加.
    • XMMatrixRotation{Axis,Normal}() に関する記述を追加.
  12. 2013/01/01(火) (本当の) 4次元の回転についてちょっと追記.


Copyright © 2008-2015 noocyte.
E-mail: relipmoced (a) yahoo.co.jp
  (" (a) " を半角のアットマークに書き替えてください.)
リンクはご自由に.
「幾何学・CG のアルゴリズム集」に戻る.
「noocyte のプログラミング研究室」トップページに戻る.