为了确定 θ 是正还是负,请记住 C 与 Va 和 Vb 垂直,指向 右手法则确定的方向。所以 C 和 Vn 是平行的。在你的例子中,如果 C 指向与 Vn 相同的方向,那么 θ 就是负的,因为你想要左旋。要快速检查 Vn 和 C 是否指向同一个方向,最简单的计算方法可能就是取它们的点乘; 如果是正的,它们指向同一个方向。
这是用来计算二维或三维向量 u,v 之间有符号角度的 Matlab 代码。代码是不言而喻的。符号约定是在 ix 和 iy ([1,0,0] ,[0,1,0])或 iy 和 iz ([0,1,0] ,[0,0,1])之间输出正的 + 90 °
function thetaDEG = angDist2Vecs(u,v)
if length(u)==3
%3D, can use cross to resolve sign
uMod = sqrt(sum(u.^2));
vMod = sqrt(sum(v.^2));
uvPr = sum(u.*v);
costheta = min(uvPr/uMod/vMod,1);
thetaDEG = acos(costheta)*180/pi;
%resolve sign
cp=(cross(u,v));
idxM=find(abs(cp)==max(abs(cp)));
s=sign(cp(idxM(1)));
if s < 0
thetaDEG = -thetaDEG;
end
elseif length(u)==2
%2D use atan2
thetaDEG = (atan2(v(2),v(1))-atan2(u(2),u(1)))*180/pi;
else
error('u,v must be 2D or 3D vectors');
end