Matlab - 向量计算夹角
输入目标向量a,初始向量设为z,计算初始向量绕x轴与y轴旋转多少角度到a向量
只适用于上半平面计算,x轴旋转限制[0,90],y轴旋转限制[0,360),逆时针为正。
图片:
代码:
function [vx1,vy1] = vector2angle(a)
% 2024-1-9
% xp
% 向量计算角度
z = [0 0 1]';
azx = [a(3) a(1)]';
zzx = [z(3) z(1)]';
vy1 = sum(zzx .* azx) ./ (norm(zzx) .* norm(azx));
vy1 = rad2deg(acos(vy1));
% 角度区分
if a(1) >= 0
vy1 = abs(vy1);
end
if a(1) < 0
vy1 = 360-abs(vy1);
end
% 奇异点计算
if isnan(vy1)
vy1 = 0;
end
ry1 = [[cosd(vy1) 0 sind(vy1)];...
[0 1 0];...
[-sind(vy1) 0 cosd(vy1)]];
% 将向量拉至计算平面
a0 = inv(ry1) * a;
ayz = [a0(2) a0(3)]';
zyz = [z(2) z(3)]';
vx1 = sum(zyz .* ayz) ./ (norm(zyz) .* norm(ayz));
vx1 = -rad2deg(acos(vx1));
% 奇异点计算
if isnan(vx1)
vx1 = 0;
end
end
判断角度正负的另一种方法(假设从z向量至a向量):
vy1 = rad2deg(acos(vy1));
if zzx(1)*azx(2) - zzx(2)*azx(1) < 0
vy1 = 360 - vy1;
end