• ベストアンサー

3次元座標を複素数で表現するには

x + iy の形で2次元座標を表示することは分かりますが 複素数を用いて3次元空間の座標表示を行なうためには どのような方法を用いるのでしょうか。 高校生の数学知識で理解できるレベルでのご説明をお願いします。

  • mqm
  • お礼率42% (581/1355)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

> 空間上の物体を平行移動するのであれば、 これだけなら、ベクトルが便利です。 実際の3D-CGなんかだと、それに加えて回転の演算が必要になります。 x,y,z軸周りの回転で表現しようとすると、結構面倒になります。 2次元の複素数平面で複素数の積で回転が表せるのと同様に、4元数を導入すると計算量を圧倒的に削減できます。 > 3次元座標を画面に表示するのであれば、虚数を使わなくとも (x, y, z) だけで > どのようなアルゴリズムで4元数をお使いになられるのかを、 3D-CGに関してなら、前述したように入門書や解説サイトなんかがたくさんあるので、そちらを見る方が分かりやすいと思います。 その10 クォータニオンを学んでみよう! http://marupeke296.com/DXG_No10_Quaternion.html クォータニオン(四元数)による3次元座標回転計算: 意志あるところに道は開く      ~Where there is a will, there is a way.~ http://kiracchi-serendipity.sblo.jp/article/28543599.html

その他の回答 (3)

回答No.4

No2 です。すみません…あらためてみてみたところ寝ぼけていたのか式が変でした: > (α, β) = (√r exp(iφ/2) cos(θ/2), √r exp(iφ/2) cos(θ/2)), …(i) ではなく(これではα=βだ…)、  (α, β) = (√r exp(-iφ/2) cos(θ/2), √r exp(iφ/2) sin(θ/2)), …(i) です…。 ■(ついでに…) 回転の詳細 (A) 三次元の点を(x,y,z)で表している時、回転は  3×3の回転行列R を用いて表します。回転は行列をベクトルに適用することで実行できます: v → v' = R v。回転操作の合成 (=ある回転と別の回転を続けて行った時に全体としてどのような回転になるかを求める) は行列の積 R1 R2 で計算できます。 (B) 一方で、三次元の点を四元数 p=ix+jy+kz で表している時、回転は  単位四元数 q = cos(θ/2) + i・n sin(θ/2),   ただし i・n = i nx + j ny + k nz,   n = (nx, ny, nz) は回転軸の向きを表す単位ベクトル,   θ は回転の角度 で表すことができます。回転は p → p' = q p q^* と計算できます。回転操作の合成は四元数の積 q1 q2 で計算できます。 (C) 三次元の点をχ=(α,β)で表している時、回転は  2×2の複素行列 g = cos(θ/2) I + (σ・n) sin(θ/2),   ただし σ・n = σx nx + σy ny + σz nz,   σx = (0 1; 1 0), σy = (0 -i; i 0), σz = (1 0; 0 -1) は2×2行列   (※σx, σy, σz はパウリ行列(Pauli matrices)と呼ばれます) と書けます。回転は行列をかけて計算できます: χ → χ' = gχ。回転操作の合成は行列の積です: g1 g2。 ■3D-CGにおける利点について余談 割りとどうでもよい話なので読み飛ばして頂いて構いません。3D-CG の場合はNo3の仰る通り計算が速い(足し算・掛け算の回数が少なくて済む)ということが四元数の主な利点だとは思いますが、数値誤差を制御するのが楽だからという話も聞いたことがあります。 3D-CG ではモデルの移動・回転、カメラの移動・回転をいろいろに組み合わせるので「回転操作の合成 」を何度も行う必要性があります。ところで、計算機は無限の桁を扱うことはできないので、計算の過程で適当なところで四捨五入をして計算を行います。何度も回転を合成する際に、四捨五入によって生まれるずれが累積しないように調整する必要があるのですが、それが四元数だと楽ということです。 つまり、3×3行列が回転行列になっているためには、  Rは直交行列(行列の各列ベクトルの長さが1で、かつ互いに直交する) という条件を満たさなければなりません。また、四元数についても  qは単位四元数 (ノルムが1) という条件を満たさなければなりません (よく考えたら、実は回転を p' = qpq⁻¹ とするならこの条件考えなくても良いかも…)。これらの条件は本来は回転操作の合成をしてもちゃんと満たされたままのはずなのですが、計算機の四捨五入によって微妙なずれが生じます。ずれが蓄積すると、モデルが勝手に拡大されたり、ひしゃげた様な形に変形してしまったりするので、ずれを補正する必要があります。 ずれを補正する問題は、  ある与えられた行列に一番近い直交行列を探す または  ある与えられた四元数に一番近い単位四元数を探す という問題に帰着されます。一番近い単位四元数を求めるのは簡単で、単に与えられた四元数を規格化すれば良いだけです: つまり q → q' = q/|q|。一方で「与えられた行列に一番近い直交行列」を求めるのはかなり面倒です。そういう意味で四元数による回転の表現の方が好まれるという側面もあるかと思います。 あとは、四元数の方が見た目に「回転軸」や「回転量」がわかりやすく直感的に扱いやすいという利点(?)もあるかもしれません。回転行列Rの成分を見せられても、それがどういう回転なのか頭の中に思い浮かべるのは難しいです…。計算機にとっては直感も何もないのでそんなの関係ないのかもしれませんが。

回答No.2

なんでも良いのであれば例えば複素数2つを持ってきて (x+iy, z) などとすればOKです…がこれだと数学的な性質からいって余り便利ではありません。便利なものとして、よくやるのは "SU(2) の基本表現(spin-1/2 representation)"だとか No1さんの言及された四元数(quaternion …でもこれは複素数ではない)による表現だとかでしょうか。といいつつこれらの表現は、2次元座標を x+iy と表現するときほどには万能ではなく、限られた議論(回転だとか)のときにだけ用いられます。 ★SU(2) の基本表現は複素数2つのペアで、3次元座標との対応は次のようにします:  (α, β) = (√r exp(iφ/2) cos(θ/2), √r exp(iφ/2) cos(θ/2)), …(i) ただし (r, θ, φ) は3次元空間座標 (x, y, z) = (r sinθ sinφ, r sinθ cosφ, r cosθ) の極座標表示です。 逆に α, β から r, θ, φ や x, y, z を求めるには、  r = |α|²+|β|², φ = arg(β/α), cosθ = (|α|²-|β|²)/(|α|²+|β|²),  x = Re[2α^* β], y = Im[2α^* β], z = |α|²-|β|² の様にできます(Re, Im は実部・虚部です。α^* は複素共役です)。因みに |α|²+|β|²=1 のとき、量子力学のスピン波動関数の観点から、(x,y,z) を "状態 (α, β) に対応するブロッホベクトル(Bloch vector)" といいます。 あと注意しておかなければならないことは、(α, β) と (exp(iξ) α, exp(iξ) β), (ξは任意定数) は空間的に同じ点を表していると考えることでしょうか。つまり、(i) で示した (α, β)は一例に過ぎず、実は空間の各点に対応する (α, β) は無数にあって、それらは定数倍exp(iξ)の違いがあるということです。 この表現がどう便利なのかについては面倒なので割愛しますが、回転操作を考えるときにすっきりした形で書けるということだけ言っておきます(他にも利点はあるかもしれませんがそんなに詳しくないので…)。 ★これらの 3次元実数・2次元複素数・1次元四元数の関係は、回転群のリー代数(Lie algebra)の対応  so(3) = su(2) = sp(1) から理解されます。実のところどれも本質的には同じなので、素直に3次元座標は実数3つで表しておくのが一番良いです(だいたいの場合)。

回答No.1

物理とか3D-CGの世界だと、クォータニオンを使うのが一般的です。 Wikipediaの説明か、ハミルトンの話が分かりやすいかも。 四元数 - Wikipedia https://ja.wikipedia.org/wiki/%E5%9B%9B%E5%85%83%E6%95%B0 ウィリアム・ローワン・ハミルトン - Wikipedia https://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A3%E3%83%AA%E3%82%A2%E3%83%A0%E3%83%BB%E3%83%AD%E3%83%BC%E3%83%AF%E3%83%B3%E3%83%BB%E3%83%8F%E3%83%9F%E3%83%AB%E3%83%88%E3%83%B3 > 高校生の数学知識で理解できるレベルでのご説明をお願いします。 ん~、難しい。 というか、多分質問者さんが「小学生に複素数を」って説明を求められるくらいにめんどくさいし、説明しても理解してもらえるって自信がない。 分かりやすい情報を収集しようとしても、3D-CG入門なんかでの説明が大量に出てきて探しにくいし。 「x + iy + jz」とかで何で上手く行かねーんだコンチクショー!って悩んだ末に問題解決に辿り着いた、ハミルトン関係のエピソードなんか読んでみるのが良いかも。 ウィリアム・ローワン・ハミルトンとは (ウィリアムローワンハミルトンとは) [単語記事] - ニコニコ大百科 http://dic.nicovideo.jp/a/%E3%82%A6%E3%82%A3%E3%83%AA%E3%82%A2%E3%83%A0%E3%83%BB%E3%83%AD%E3%83%BC%E3%83%AF%E3%83%B3%E3%83%BB%E3%83%8F%E3%83%9F%E3%83%AB%E3%83%88%E3%83%B3 3Dアニメーションの原点は、ダブリンの橋に刻まれた数式 « WIRED.jp http://wired.jp/2002/11/01/3d%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E5%8E%9F%E7%82%B9%E3%81%AF%E3%80%81%E3%83%80%E3%83%96%E3%83%AA%E3%83%B3%E3%81%AE%E6%A9%8B%E3%81%AB%E5%88%BB%E3%81%BE%E3%82%8C/ Amazon.co.jp: 天才の栄光と挫折―数学者列伝 (文春文庫): 藤原 正彦: 本 http://www.amazon.co.jp/%E5%A4%A9%E6%89%8D%E3%81%AE%E6%A0%84%E5%85%89%E3%81%A8%E6%8C%AB%E6%8A%98%E2%80%95%E6%95%B0%E5%AD%A6%E8%80%85%E5%88%97%E4%BC%9D-%E6%96%87%E6%98%A5%E6%96%87%E5%BA%AB-%E8%97%A4%E5%8E%9F-%E6%AD%A3%E5%BD%A6/dp/4167749025 Amazon.co.jp: 数学をつくった人びと〈2〉 (ハヤカワ文庫NF―数理を愉しむシリーズ): E.T. ベル, Eric Temple Bell, 田中 勇, 銀林 浩: 本 http://www.amazon.co.jp/dp/toc/4150502846/ref=dp_toc?_encoding=UTF8&n=465392

mqm
質問者

補足

ご親切な解説をいただき、とてもためになりました。 ハミルトンが10年もかかって4元数を発見したことが分かりました。 まだ疑問が解けずにいることがあります。 3D-CGの世界で、なぜ4元数が登場するのか、 その理由をお教えいただけますでしょうか。 3次元座標を画面に表示するのであれば、虚数を使わなくとも (x, y, z) だけで 表現できるように思うのですが、 どのようなアルゴリズムで4元数をお使いになられるのかを、 大学初級程度の数学の知識で教えていただければ助かります。 空間上の物体を平行移動するのであれば、 (x, y, z) から (x+a, y+b, z+c) への移動は、ベクトルの足し算でできると思いますので なぜ4元数が出てくるのか、まだ分かりません。 時間表記を3次元座標に加えるために、4次元の計算が登場することになるのでしょうか。 よろしくお願いします。 .

関連するQ&A

  • 3次元座標群の収束性の評価

    3次元座標群がどの程度収束しいるのかを評価する方法が分からなくて困っています。空間座標の中で(X1,Y1,Z1)という座標がn個あった場合はどうすればよいでしょう?自分が思いついた方法はn個分の各X,Y,Zの値から平均値を求め、つまり重心座標にあたると思われる座標を一つ求め、そこから各座標への3次元的な座標間距離と算出し、その距離の平均値が大きいか小さいかで評価していくというものなのですが、こんな方法でよいのでしょうか?当方数学的知識に乏しく(中学生並み)お恥ずかしいのですが、誰か良きアドバイスがあればうれしいです。(^^;)

  • 球座標系の複素数表示について

    球座標系を1つの虚数単位 i を用いて表示するには、 x→y の角度をθ z軸からの角度をφとすれば z = rcosφ x+iy = rsinφexp(iθ) と表せますが、これではとても不便なように感じます。 そこで、二次元極座標系が1つの虚数単位 i を用いて ベクトルr = r exp(iθ) と表わせるように 三次元球座標系が2つの虚数単位 i, j を用いて ベクトルr = r f(θ,φ) のような形で表わせると思うのですが、 どなたか表し方をご存知の方はいらっしゃいますでしょうか。

  • 3次元で回転させた座標値の計算方法

    点(Ax、Ay、Az)を3次元空間にある、点(Bx、By、Bz)から、点(Cx、Cy、Cz)に向かう直線を軸に任意の角度で回転させたときの、点(A’x、A’y、A’z)の座標値の計算方法を教えてください。ただし自分の数学レベルは中学生並でベクトルが少しだけ理解できるていどです。よろしくお願いします。

  • 3次元座標の求め方

    3次元座標の求め方 原点 0,0,0 を中心にした球体面上の正面から見た頂点座標で、 回転による移動後の座標の求め方を知りたいです。 例えば、球面の半径が 100 で、頂点の座標 x1, y1, z1 が 100, 0, 0 にある場合、 Y軸に対してπ/2 rad (90度)回転した座標 x2, y2, z2 は 0, 0, -100 になると思うのですが、 この新たな3つの座標 x2, y2, z2 を導くにはどのように計算しているのでしょうか。 平面上の円運動のように cos sin の組み合わせ等で導き出せるのでしょうか。 x1, y1, z1 から、 Y軸に対してr回転 した場合の各 x2, y2, z3 の出し方 X軸に対してθ回転 した場合の各 x3, y3, z3の出し方 Z軸に対してΘ回転 した場合の各 x4, y4, z4 の出し方 のような形で、導くための計算を順にお教えいただけると嬉しいです。 最終的には、元座標 x, y, z をY軸にr、更にそこからX軸にθ、更にそこからZ軸にΘで X, Y, Z になる、といった形で求められるようになりたいと思っています。 座標は原点 0, 0, 0を中心に 上に行くほどYが「減少」 右に行くほどXが「増加」 奥に行くほどZが「増加」 Y減少 ↑ _ Z増加 │/` ├─→ X増加 という形になっています 自分のわかる限りで質問内容を細かく記述したつもりですが、 数学の知識に乏しいので、記号などの使い方や説明の不備があるかもしれません。 何か不足があった場合には補足させて頂きます。 以上宜しくお願い致します。

  • 空間座標(3次元)を平面座標(2次元)に変換する

    私は現在ゲーム制作を行っているのですが、空間座標を平面座標に変換する方法が分かりません。色々なサイトを見てまわったのですが、如何せん大学等で専門的な数学や物理を習ったわけでは無いので何かの記号を使った式を見せられても理解ができないのです。しかし、その勉強をしている時間が本当に無く(他にもやらないといけない事があり)、ここを頼らせてもらいました。 分かり易い説明をしているサイトを教えてくださるだけでも結構です。どうか、よろしくお願いします。

  • 3次元の極座標について

    x=rsinθcosφ y=rsinθsinφ z=rcosθ というのが3次元における極座標表示のようですが、なぜこのような式になるんですか? このような式にいたるまでの過程を教えてください。 できるだけ分かりやすく教えてほしいので、行列などを使っての説明はできるだけしないでください。 よろしくお願いします。

  • 複素数

    複素数について質問させて頂きます。 参考書には、 「複素数zが実数でない場合つまり、虚部が0でないときzは虚数である」という。 というように記載されていました。 私は複素数は常に虚数だと認識していましたがそうでない場合もあるのでしょうか? 複素数zが実数でない場合と記載されていたので複素数が実数の場合もあるのでは ないかと考えた次第です。 つまり、 z=x+iy (z:複素数、x,y:実数、i:虚数単位) において、y=0の場合でもzを複素数と呼ぶのですか? 上記の場合、zは虚数ではないですが複素数とは言えるのでしょうか? 複素数の定義は、 実数x,yと虚数単位iを用いてz=x+iyの形で表すことのできる数です。 (定義にy≠0は特に記載されていませんでした。) なので、z=x+iyにおいてy=0の場合は複素数とは言わないと考えています。 質問内容を整理しますと、 (1)複素数は常に虚数である (2)z=x+iyにおいて、y=0のときzは複素数ではない   複素数の定義にy≠0は必要なのでしょうか? 以上、ご回答よろしくお願い致します。

  • 4次元の座標系の書き方教えてください

    4次元の図形を理解するうえでまず四次元の座標系を図示できるようになりたいのですが、どのように書けばよいのでしょうか? 理論象限数が16あるはずですけど、x,y,zの座標軸が直交した図に対してどのようにもう一本座標軸として線を引いてみても、象限の内部の点についてたとえば(正,負,正正)なら、そのようになる象限がだぶってできてしまったして、整合性が取れた図になりません。

  • エクセルを用いた3次元座標変換

    3次元座標空間において、座標軸を回転移動させて三つの基準座標点のz座標をすべて0にする方法を教えていただけないでしょうか。 例:(x1,y1,z1), (x2,y2,z2), (x3,y3,z3) →(回転移動)→ (x1',y1',0), (x2', y2', 0), (x3', y3', 0)  よろしくお願いします。

  • 3次元における回帰直線について

    3次元空間の中で3次元座標値(Xn,Yn,Zn)を持ったいくつか(5,6個)の点から回帰を行い1本の直線の式あるいはベクトルとして見いだすことは可能でしょうか?回帰平面としてz=ax+by+cという式にする方法は分かったのですが、ただ3次元の中での直線というものもいまいち理解していないのですが・・・。数学的知識が乏しくてお恥ずかしいのですがm(_ _)m