パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

「虚数とかいつ使うんだよ」に対し、セガがゲームに使うと社内の数学資料公開」記事へのコメント

  • いろいろな解説を読んでも今一つきちんと腹落ちしてこないんだけど、改めてこれで勉強しなおそう。
    #ゲームやCGだけじゃなくて、ロボットの姿勢制御でもやろうかという向きにもきっと参考になるはず。

    • by Anonymous Coward on 2021年06月18日 10時15分 (#4053319)

      まあ別に、三次元空間での座標変換は虚数使わなくたって出来るけど、虚数(四元数)使うと座標のx,y,zをまとめて
      一つの式に放り込んで扱えるので「エレガント」(数学者的にはこれがとても大事らしい)だよと言う話だ。

      親コメント
      • Re:四元数 (スコア:3, 興味深い)

        by taka2 (14791) on 2021年06月18日 12時21分 (#4053425) ホームページ 日記

        4元数は「向き」しか表現できないので、「3次元空間での座標変換」なんて大きな観点だと、エレガントかどうかは微妙。

        「3次元空間での座標変換」では、アフィン変換行列ってのが使われますが、これは
        4x4の行列で、位置(移動)・向き(回転)・大きさ(拡大縮小)を統合的に取り扱うことができ、
        さらには「行列の積で、変換をまとめることができる」というのがすごくエレガント。

        ちょっと前にストーリーになった「GPU」は、従来のビデオカードに対して、
        「T&L」(=Transform and Lighting)がハードウェアでできる、というのが売りでしたが、
        この「T」がアフィン変換機能。
        「変換行列」と「頂点データ」を渡せば、ハードウェアで座標変換してくれて指定の位置向き大きさで描画される。

        で、従来は、向きの表現方法としては「オイラー角」(いわゆるロール、ピッチ、ヨー表現)がよく使われていたんだけど、
        これはアフィン変換と相性がいいし、静的な状態表現としては問題ありませんが、
        「アニメーションさせる」といった時間変化に対応しようとすると、補間が汚いという欠点がある。
        オイラー角表現は特定の軸に依存しているため、相対的な変化は同じでも、絶対的な軸との関係で挙動が変わるし、
        ジンバルロックとか、特定の向きで自由度が減ってしまって補間できなくなる場面も。

        そこで出てきたのが4元数で、「回転」の表現しかできませんが、
        「向きの補間」が非常にエレガントな式で表現できる。

        ですが、アフィン変換では p' = A p という単純な変換行列Aと座標ベクトルpの積で変換計算できるのたいして、
        4元数による回転変換式は、p' = q p q* という、座標の前後を4元数qとその共役q*で挟む形の式なので、
        4元数による回転は、そのままでは、アフィン変換による移動や拡縮と統合できません。GPUまかせの描画もできない。

        でも、アフィン変換は懐が広い(どんな回転もアフィン変換で表現できる)ので、4元数による回転変換もアフィン変換行列に変換可能。
        なので、
        ・「内部的な向き表現」は4元数で管理して、4元数で補間などの処理を行い、
        ・「最終的な座標変換」の段階では4元数をアフィン変換行列にしてから、移動や拡縮と統合する
        って使い方が普通ですね。

        親コメント
        • by Anonymous Coward

          3次元空間の計算を行列でやるってのは自分でやってたから知ってるけど
          例に出てないだけで行列の計算も「何のために勉強するの?」って言われる代物だろう。

      • by Anonymous Coward

        数学的にエレガントな状態はプログラムでの実装においてもより簡素(かつ、おそらくは高速)になるので、それはとても重要なことなのでは?

        • by Anonymous Coward

          計算量は変わらんよ。

          • by Anonymous Coward

            本質的な計算量は変わらなくても、
            無駄なステップが減って、コンピュータ上の実行命令数は減ったりするような気がします。

            • by Anonymous Coward

              なんで「気がする」だけでそう引っ張るのかw
              記述がシンプルになるというのと、計算量は別だ。
              コンパイラ通した後の処理量は変わらん。

              • by Anonymous Coward

                コンパイラが本当にかしこければそうだけどそれは現実的には無理のある仮定じゃないかなー

              • by Anonymous Coward

                「十分まともな記述」と「さらにエレガントな記述」だと差はなくとも
                変な(すなわちエレガントでもない)記述をすることで無駄な計算量を増やす余地はあるもんな!(なんか悲しくなってきた

身近な人の偉大さは半減する -- あるアレゲ人

処理中...