一定値だけ旋回

ワンコ関連でちょっと必要だったので。

以下に出てくるベクトルの長さはすべて1とする。ベクトルaからベクトルbの向きにθまわしたベクトルcを求めたい。a・b=±1等とくに特殊な場合を考えなくて良い。ただし途中でベクトルを角度に落とさないで求めたい。

2次元で考える。bを固定しない場合のcの候補は2通りしかない。D=ax*by-ay*bxとして、D>0の場合xy座標系で反時計回り。よってaにθの回転行列を掛ければよい。
\mathbb{c}=\left(\begin{array}{cc}\cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{array}\right)\mathbb{a},
こんな感じ。D<0の場合はθが-θになる。実質sinのところの符号が入れ替わるだけ。

3次元で考える。クォータニオンの得意分野。aを表すクォータニオンをA, 回転クォータニオンをQとすると、
Q=(\cos(\theta/2); \alpha \sin(\theta/2), \beta \sin(\theta/2), \gamma \sin(\theta/2)).
(α,β,γ)は回転軸なので、a×bに等しい。以上よりQ^-1AQを計算すればOK.