クォータニオンによる回転演算子の意味

クォータニオンによる回転ではq⊗r⊗q*で回転を表現する。
qを回転行列Rのようにとらえれば、位置ベクトルの「前に」qを置くのは自然に思える。
ところで、なぜ回転を表すqとその共役q*で挟み込むのか、というのが納得できていない。

クォータニオンの積q⊗r⊗q*では、
ステップ1:tmp = q⊗r
という計算に続いて、
ステップ2:tmp⊗q*
という演算が行われている。
ステップ1の計算でオーバーランした分をステップ2で戻しているのかと思い、以下のコードで調べてみた。

clear; close all;

x=1;
y=1;
z=1;
P = [x;y;z];
O = [0;0;0];
vec = [O,P];
plot3(vec(1,:),vec(2,:),vec(3,:),'magenta','LineWidth',3);
hold on;

Xaxis = [1,0,0]';
Yaxis = [0,1,0]';
Zaxis = [0,0,1]';
OX = [O,Xaxis];
OY = [O,Yaxis];
OZ = [O,Zaxis];
plot3(OX(1,:),OX(2,:),OX(3,:),'r');
plot3(OY(1,:),OY(2,:),OY(3,:),'g');
plot3(OZ(1,:),OZ(2,:),OZ(3,:),'b');
xlim([-2,2]);
ylim([-2,2]);
zlim([-2,2]);

view(180,0);

for theta=linspace(0,2*pi*2,10)
    if (theta==0) || (theta==4*pi)
        continue
    end
    a = [0,1,0]';
    n = a/norm(a);
    x = P(1);
    y = P(2);
    z = P(3);
    nx = n(1);
    ny = n(2);
    nz = n(3);
    q1 = [0,x,y,z]';
    q2 = [cos(theta/2),nx*sin(theta/2),ny*sin(theta/2),nz*sin(theta/2)]';
    q3 = [cos(theta/2),-nx*sin(theta/2),-ny*sin(theta/2),-nz*sin(theta/2)]';

    q_tmp =  MultQuat(q2,q1);
    P2_tmp = q_tmp(2:4);
    vec2_tmp = [O,P2_tmp];
    plot3(vec2_tmp(1,:),vec2_tmp(2,:),vec2_tmp(3,:),'b--');

    big;
    drawnow;
    pause(0.3);

    q =  MultQuat(q_tmp,q3);
    P2 = q(2:4);
    vec2 = [O,P2];
    plot3(vec2(1,:),vec2(2,:),vec2(3,:),'k--');
    
    big;
    drawnow;
    pause(0.3);
end


function q = MultQuat(q1,q2)
pw = q1(1);
px = q1(2);
py = q1(3);
pz = q1(4);
qw = q2(1);
qx = q2(2);
qy = q2(3);
qz = q2(4);
q = [pw*qw-px*qx-py*qy-pz*qz;
    pw*qx+px*qw+py*qz-pz*qy;
    pw*qy-px*qz+py*qw+pz*qx;
    pw*qz+px*qy-py*qx+pz*qw];
end

青がステップ1の計算結果、黒がステップ2の計算結果である。
回転軸に垂直な平面でみると黒が青をカバーする事がわかる。

実際には黒と青は一致しているわけではなく、青線は3次元的に配置されている。
カンでは
青線(ステップ1の計算結果)がどういう物理的な意味を持っているのか、調べる必要がある。