HN 日本語サマリー

← 一覧へ戻る
プログラミング

行列とクォータニオンに関するFAQ

Matrix and Quaternion FAQ (j3d.org)

17 pointsby signa113 コメント

要約

このFAQは、行列とクォータニオンに関する基本的な概念から、算術、決定因子と逆行列、変換(回転、移動、拡大縮小)、そしてクォータニオンの応用まで、幅広い情報を提供するドキュメントです。主に3Dグラフィックスやアニメーションにおけるこれらの数学的ツールの利用に焦点を当てており、OpenGLなどのグラフィックスライブラリにおける行列の表現方法に関する重要な注意点も含まれています。ドキュメントは2003年11月30日にバージョン1.21として更新され、長年にわたり多くの貢献者によって修正と改善が重ねられてきました。

全文翻訳

行列とクォータニオンに関するFAQ\n==============================\nバージョン1.21\n2003年11月30日\n-------------------------------\nフィードバックは matrix_faq@j3d.org まで、件名をMATRIX-FAQで始めてメールしてください(そうしないとスパムフィルターによってメッセージが削除されます)。追加の提案や関連する質問も歓迎します。上記のアドレスにメールを送信してください。\nこのFAQの最新版は以下のウェブページで入手できます: http://www.j3d.org/matrix_faq/matrfaq_latest.html\nこのFAQは自由に配布またはコピーしてください。\n\n貢献者\n-------------\n序論 I1: Steve ?????\nQ55からQ59の修正: Andreas Junghanns\nQ50の修正: Morten Ofstad\nQ39への注記: Tom Nuydens\nQ29とQ37の修正: Eric Reiss\nQ56の明確化: Duncan Murdoch\nQ37の明確化: Ron Avitzur\nQ1の修正: Mona Wong\nQ36とQ37の修正: Eric Reiss\nQ34とQ38の改善: Jon Watte\nQ58とQ59への警告と代替案: Paul Pedriana\nQ53の修正(および最適化 [Lee]): Eleanor GroundwaterとLee Morgan\nQ39の改善: jhunpingco\nQ11の修正とQ12の最適化: Gordon\nQ54からQ60の修正: Eleanor Groundwater\nQ23とQ24の修正と改善: Ben Houston\nQ39への追加: Jon Watte\nQ61の修正: Adam D. Moss\nQ63の追加: Mike Cline\nI2の追加: Jacob Marner\nQ38の修正とI2の開始: Armin Müller\nQ60の追加: Pablo Figueroa\nCorrentionsとQ14, Q16, Q21, Q34への追加: Tronster Hartley\nQ12とQ54の修正: Frank DJ\nQ34の修正: Robert Funnell\n\n履歴\n-------\n私(Andreas)は、しばらくの間これを管理していたと思われる "hexapod@(no-spam)netcom.com" を探そうとしましたが、netcom.comのサイトはもう存在せず、メールも戻ってきてしまいます。\n私(と私の同僚たち)は、このドキュメントの以前のバージョンで与えられたアルゴリズムのいくつかで何が間違っているかを突き止めるのにかなりの時間を無駄にしたため、それを修正してウェブに戻すことにしました。\n以前、これらのドキュメントの場所として示されていたサイトはもう存在しません:\nftp://ftp.netcom.com/pub/he/hexapod/index.html\nhttp://www.glue.umd.edu/~rsrodger\n\nバージョン、日付、およびローカルコピーへのリンク(比較のため):\nmatrfaq_1.02.html: バージョン1.2 1997年9月2日\nmatrfaq_1.04.html: バージョン1.4 1998年12月26日\nmatrfaq_1.06.html: バージョン1.6 2000年9月30日\nmatrfaq_1.07.html: バージョン1.7 2000年12月20日\nmatrfaq_1.08.html: バージョン1.8 2000年12月21日\nmatrfaq_1.09.html: バージョン1.9 2001年1月16日\nmatrfaq_1.10.html: バージョン1.10 2001年1月30日\nmatrfaq_1.11.html: バージョン1.11 2001年2月9日\nmatrfaq_1.12.html: バージョン1.12 2001年3月26日\nmatrfaq_1.13.html: バージョン1.13 2001年7月20日\nmatrfaq_1.14.html: バージョン1.14 2001年8月17日\nmatrfaq_1.15.html: バージョン1.15 2001年8月20日\nmatrfaq_1.16.html: バージョン1.16 2001年10月2日\nmatrfaq_1.17.html: バージョン1.17 2001年11月30日\nmatrfaq_1.18.html: バージョン1.18 2002年1月27日\nmatrfaq_1.19.html: バージョン1.19 2002年3月20日\nmatrfaq_1.20.html: バージョン1.20 2002年1月31日\nmatrfaq_1.21.html: バージョン1.21 2003年11月30日\n\n数学的な質問はご遠慮ください。私はこのFAQを維持しているだけであり、この主題についてはほとんど知識がありません。しかし、このFAQで答えられていない質問があり、後にその答えを見つけ、このFAQ(またはその読者)に関連性があると思われる場合は、すべての関連情報(できれば事前に整理された形式で)を私に送って、ここに含めるようにしてください。ありがとうございます!\n貢献者リストに「匿名」で表示されたい場合はお知らせください。そうでない場合は、メールヘッダーから収集できる名前で記載させていただきます。\n\nはじめに\n------------\nI1. OpenGLとこのドキュメントに関する重要な注意点\nI2. 正規化された入力に関する重要な注意点\n\n質問\n---------\n\n基礎\n======\nQ1. 行列とは何ですか?\nQ2. 行列の次数とは何ですか?\nQ3. C/C++プログラミング言語を使って行列をどのように表現しますか?\nQ4. 行列を使用する利点は何ですか?\nQ5. 行列は座標系とどのように関連しますか?\n\n算術\n==========\nQ6. 単位行列とは何ですか?\nQ7. 行列の主対角行列とは何ですか?\nQ8. 行列の転置とは何ですか?\nQ9. 2つの行列をどのように足し合わせますか?\nQ10. 2つの行列をどのように引き算しますか?\nQ11. 2つの行列をどのように掛け合わせますか?\nQ12. 行列を2乗したり、べき乗したりするにはどうしますか?\nQ13. 1つまたは複数のベクトルを行列で掛けるにはどうしますか?\n\n決定因子と逆行列\n=========================\nQ14. 行列の決定因子(行列式)とは何ですか?\nQ15. 行列の決定因子をどのように計算しますか?\nQ16. 等方性行列と異方性行列とは何ですか?\nQ17. 行列の逆行列とは何ですか?\nQ18. 任意の行列の逆行列をどのように計算しますか?\nQ19. 単位行列の逆行列をどのように計算しますか?\nQ20. 回転行列の逆行列をどのように計算しますか?\nQ21. クラメールの規則を使って行列の逆行列をどのように計算しますか?\nQ22. 2x2行列の逆行列をどのように計算しますか?\nQ23. 3x3行列の逆行列をどのように計算しますか?\nQ24. 4x4行列の逆行列をどのように計算しますか?\nQ25. 線形方程式を使って行列の逆行列をどのように計算しますか?\n\n変換\n==========\nQ26. 回転行列とは何ですか?\nQ27. 回転行列は座標系とどのように関連しますか?\nQ28. X軸方向の回転行列をどのように生成しますか?\nQ29. Y軸方向の回転行列をどのように生成しますか?\nQ30. Z軸方向の回転行列をどのように生成しますか?\nQ31. オイラー角とは何ですか?\nQ32. ヨー、ロール、ピッチとは何ですか?\nQ33. 回転行列をどのように結合しますか?\nQ34. ジンバルロックとは何ですか?\nQ35. 回転行列を結合する正しい方法は何ですか?\nQ36. オイラー角から回転行列をどのように生成しますか?\nQ37. 回転行列からオイラー角をどのように生成しますか?\nQ38. 選択された軸と角度から回転行列をどのように生成しますか?\nQ39. あるベクトルを別のベクトルにマッピングするための回転行列をどのように生成しますか?\nQ40. 行列を使って2つの座標系間を変換するにはどうしますか?\nQ41. 平行移動行列とは何ですか?\nQ42. スケーリング行列とは何ですか?\nQ43. シアー行列(せん断行列)とは何ですか?\nQ44. 2つの行列間で線形補間を行うにはどうしますか?\nQ45. 4つの行列間で3次補間を行うにはどうしますか?\nQ46. 行列をどのようにレンダリングできますか?\n\nクォータニオン\n===========\nQ47. クォータニオンとは何ですか?\nQ48. クォータニオンは3Dアニメーションとどのように関連しますか?\nQ49. クォータニオンの共役をどのように計算しますか?\nQ50. クォータニオンの逆行列をどのように計算しますか?\nQ51. クォータニオンの大きさをどのように計算しますか?\nQ52. クォータニオンを正規化するにはどうしますか?\nQ53. 2つのクォータニオンをどのように掛け合わせますか?\nQ54. クォータニオンを回転行列に変換するにはどうしますか?\nQ55. 回転行列をクォータニオンに変換するにはどうしますか?\nQ56. 回転軸と角度をクォータニオンに変換するにはどうしますか?\nQ57. クォータニオンを回転軸と角度に変換するにはどうしますか?\nQ58. 球面回転角をクォータニオンに変換するにはどうしますか?\nQ59. クォータニオンを球面回転角に変換するにはどうしますか?\nQ60. オイラー回転角をクォータニオンに変換するにはどうしますか?\nQ61. クォータニオンを使って行列間の線形補間を行うにはどうしますか?\nQ62. クォータニオンを使って行列間の3次補間を行うにはどうしますか?\nQ63. クォータニオンを使ってベクトルを回転させるにはどうしますか?\n\nはじめに\n------------\nI1. OpenGLとこのドキュメントに関する重要な注意点\n-------------------------------------------------------\nこのドキュメントでは(ほとんどの数学の教科書と同様に)、すべての行列は標準的な数学的記法で描かれています。残念ながら、IrisGL、OpenGL、SGIのPerformerといったグラフィックスライブラリは、行と列を入れ替えて行列を表現しています。したがって、このドキュメントでは(例えば)4x4の平行移動行列が次のように表現されているのを見ることになります。\n\n| 1 0 0 X |\n| |\n| 0 1 0 Y |\nM = | |\n| 0 0 1 Z |\n| |\n| 0 0 0 1 |\n\nPerformer(例えば)では、これは次のように格納されます。\n\nM[0][1] = M[0][2] = M[0][3] = M[1][0] = M[1][2] = M[1][3] = M[2][0] = M[2][1] = M[2][3] = 0 ;\nM[0][0] = M[1][1] = M[2][2] = m[3][3] = 1 ;\nM[3][0] = X ; M[3][1] = Y ; M[3][2] = Z ;\n\nすなわち、行列は次のように格納されます。\n| M