articles:rotation

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
articles:rotation [2021/11/17 10:28] – [直交行列から回転軸,角度表現を求める] Takashi Suehiroarticles:rotation [2022/03/04 08:56] (現在) – [プログラムと練習問題] Takashi Suehiro
行 710: 行 710:
 ここの説明では$ n_x $から解いたが実際には上3つの式を解いて ここの説明では$ n_x $から解いたが実際には上3つの式を解いて
 一番絶対値の大きい成分から残りを計算すると精度的にも良い値が得られる. 一番絶対値の大きい成分から残りを計算すると精度的にも良い値が得られる.
 +
 +
 +ほとんどの場合,上記の解き方で問題はないが,$\theta = \pi$の場合は計算誤差などの関係で微妙な問題が発生する可能性がある.
 +そこでその場合について別途解いておくことにする.式(9)に代入して,
 +$$
 +\left( \begin{array}{cc}
 +-1 + 2 n_x^2  & 
 +2 n_x n_y  &
 +2 n_z n_x  \\
 +
 +2 n_x n_y  &
 +-1 + 2 n_y^2 &
 +2 n_y n_z \\
 +
 +2 n_z n_x &
 +2 n_y n_z &
 +-1 + 2 n_z^2
 +\end{array} \right)
 +$$
 +係数を比較すると
 +$$
 +-1 + 2 n_x^2 = a_{xx}
 +$$
 +$$
 +-1 + 2 n_y^2 = a_{yy}
 +$$
 +$$
 +-1 + 2 n_z^2 = a_{zz}
 +$$
 +$$
 +2 n_x n_y = a_{yx} = a_{xy}
 +$$
 +$$
 +2 n_y n_z = a_{zy} = a_{yz}
 +$$
 +$$
 +2 n_z n_x = a_{xz} = a_{zx}
 +$$
 +よって
 +$$
 +n_x = \pm \sqrt{{1 + a_{xx}} \over 2}
 +$$
 +$ n_x \ne 0 $の場合,$\pi$回転はどちらに回しても同じなので正負はどちらを選んでもよい.
 +他の成分はこれと整合を取るため以下のように計算する.
 +$$
 +n_y = a_{yx}/ 2 n_x
 +$$
 +$$
 +n_z = a_{xz}/ 2 n_x
 +$$
 +$ n_x = 0 $の場合は他の成分から解けば良い.
 +
 +ここの説明では$ n_x $から解いたが実際には$a_{xx}$,$a_{yy}$,$a_{zz}$を比較して,
 +一番大きい成分から残りを計算するとゼロ割が問題にならないし精度的にも良い値が得られる.
 --> -->
  
行 790: 行 844:
 さらに言えば四元数を求めてからロドリゲスを計算するほうが良いのかもしれない.)). さらに言えば四元数を求めてからロドリゲスを計算するほうが良いのかもしれない.)).
  
-ほとんど場合,上記の解きで問題ないが,$\theta = \pi$の場合は計算誤差など関係微妙な問題発生す可能性がある. +計算は$\theta$が大きいときにゼロ割が発生しないで安定して計算ができるが, 実際のプログラムでは計算誤差の影響平方根の中の値極めて小さいときに負になことがあるという点注意を払う必要がある.
-そこでその場合について別途解いておくことにる.式(9)に代入して, +
-$$ +
-\left( \begin{array}{cc} +
--1 + 2 n_x^2  &  +
-2 n_x n_y  & +
-2 n_z n_x  \\+
  
-2 n_x n_y  & +===== プログラムと練習問題 =====
--1 + 2 n_y^2 & +
-2 n_y n_z \\+
  
-2 n_z n_x & +[[articles:geo_basic#MATRIX|回転行列演算のプログラム]]
-2 n_y n_z & +
--1 + 2 n_z^2 +
-\end{array} \right) +
-$$ +
-係数を比較すると +
-$$ +
--1 + 2 n_x^2 = a_{xx} +
-$$ +
-$$ +
--1 + 2 n_y^2 = a_{yy} +
-$$ +
-$$ +
--1 + 2 n_z^2 = a_{zz} +
-$$ +
-$$ +
-2 n_x n_y = a_{yx} = a_{xy} +
-$$ +
-$$ +
-2 n_y n_z = a_{zy} = a_{yz} +
-$$ +
-$$ +
-2 n_z n_x = a_{xz} = a_{zx} +
-$$ +
-よって +
-$$ +
-n_x = \pm \sqrt{{1 + a_{xx}} \over 2} +
-$$ +
-$ n_x \ne 0 $の場合,$\pi$回転はどちらに回しても同じなので正負はどちらを選んでもよい. +
-他の成分はこれと整合を取るため以下のように計する. +
-$$ +
-n_y = a_{yx}/ 2 n_x +
-$$ +
-$$ +
-n_z = a_{xz}/ 2 n_x +
-$$ +
-$ n_x = 0 $の場合は他成分から解けば良い.+
  
-ここの説明では$ n_x $から解いたが実際には$a_{xx}$,$a_{yy}$,$a_{zz}$を比較して, +[[articles:geo_manual#回転行列|練習問題]]
-一番大きい成分から残りを計算するとゼロ割が問題にならないし精度的にも良い値が得られる.+
  • articles/rotation.1637112482.txt.gz
  • 最終更新: 2021/11/17 10:28
  • by Takashi Suehiro