矢量的方向

时间:2012-08-01 09:40:41

标签: matlab

如果我有:

a=magic(9);

如何计算a中任意两点之间矢量的方向和幅度?例如,如果我定义vec = [a(1,1) a(2,2)],向量的方向是否定义为:vecdir = a(1,1) - a(2,2)

2 个答案:

答案 0 :(得分:7)

计算方向的正确方法是使用atan2()而不是atan(),因为atan()无法解析象限并在第二和第三象限中给出错误的角度(即x时)是消极的)。例如,

x = -1;
y = -1;
dir = atan(y/x);  % returns 0.78540 rad = 45 deg

这显然是错误的方向。但是,atan2()会产生

dir2 = atan2(y, x); % returns -2.3562 rad = -135 deg.

如果您坚持使用atan(),则必须检查x-argument的符号,并在其为负数时添加pi

答案 1 :(得分:2)

vec = [x y]
dist = sqrt(sum(vec.^2)) % i.e. sqrt(x^2 + y^2)
dir = atan(y/x) % i.e. atan(vec(2) / vec(1))