dポイントプレゼントキャンペーン実施中!

三次元で、ある方向から別の方向に回転させるとき
いっぺんに回転しないで、少しずつ回転させようと思います
少しずつ回転させるために、回転を等分したいのですが
これはどうしたらよいでしょうか

例えば回転が行列Aで表されてる場合
この回転の10%の回転量はどのように計算すればよいでしょうか

A 回答 (3件)

理論的に整理するためには、特異値分解(固有値分解)という概念が必要です。

その言葉を使うなら「回転軸とは固有ベクトルに他ならない」ということです。が、「最悪なんとか」する方法をお尋ねなのでしょうから、ここでは理屈はおいといて、即物的に行きましょう。

 回転の中心が原点になる座標系ではAは3次の正方行列になっている。念のために確認しておきますと、3次の正方行列Xが回転であるというのは、 X' X = X X' = I、|X| = 1を満たすということです。(ただしX'はXの転置行列、|X|はXの行列式、Iは単位行列。)
 さて、
(1) 回転軸がz軸になるように、座標変換します。すなわち
  A = T R
となる回転Tを見つけて、Rがxy平面内だけでの回転になるようにするんです。
  R = T' A
です。回転変換T'によって、Aの回転軸がz軸になるように座標変換したものが、回転Rです。
変換Rは3行目は(0,0,1)、3列目も(0,0,1)であり、実質2次の正方行列です。この行列はパラメータ1個(回転角)だけで表せて、ふたつの対角成分はどちらもcosα, ふたつの非対角成分はそれぞれsinαと-sinαです。
(2) sinαとcosαが分かったから、arctangentを使えばαが計算できます。
(3) 分割した回転の回転角をφとします。ご質問では
  φ=α/10
です。この角度の回転を表す3次(実質2次)の正方行列Sを作る。それには、Sの3行目は(0,0,1)、3列目も(0,0,1)にして、ふたつの対角成分をcosφ, ふたつの非対角成分をそれぞれsinφと-sinφにするんです。
(4) T S がお求めの変換です。

 で、(1)をどうやって計算するか。
  T = U V
とします。U, Vはどちらも回転を表す3次正方行列ですが、Uはx軸を回転軸とする回転であり、つまり1行目は(1,0,0)、1列目も(1,0,0)であって、残り4つの成分のうちふたつの対角成分はどちらもcosβ、ふたつの非対角成分はそれぞれsinβと-sinβです。Vはy軸を回転軸とする回転であり、つまり1行目は(0,1,0)、1列目も(0,1,0)であって、残り4つの成分のうちふたつの対角成分はどちらもcosγ、ふたつの非対角成分はそれぞれsinγと-sinγです。すると、
   R = V' U' A
である。まずU' すなわちβを決めます。U'Aの2行3列目成分と3行2列目の成分が0になるようにするんです。次に、V' すなわちγを決めます。V' U'Aの1行3列目成分と3行1列目の成分が0になるようにするんです。(「なるようにする」にはどうすればいいか、は簡単。)これで、Rは(1)で説明した形になり、Tも決まりました。
    • good
    • 0
この回答へのお礼

回答ありがとうございます

特異値分解が必要ですか
エピポーラ幾何とかで実装したような気もしますがよく覚えていないですね。。。

詳しい手順を教えていただきありがとうございます
順を追ってみてみようと思います

お礼日時:2018/07/12 00:31

軸と回転角度を求めればなんとかなる. 最悪数値的に処理すればなんとでもなる.

    • good
    • 0
この回答へのお礼

回答ありがとうございます

回転ベクトルでしたっけ
確かにそれでできそうな気がしてきました

最初四元数を使って何かできないかと思ってましたが
これだと角度が等分割できない気がしてました

お礼日時:2018/07/12 00:23

半角の式を三回使って、θ/8 を作れば、12.5 %、四回使って、θ/16 を作れば、6.25 % の回転になると思います。

    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ですが、そういう話ではなく、もう少し落ち着いて質問を読み直していただければと思います。

お礼日時:2018/07/12 00:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!