Matlab - 向量计算夹角

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值