方向的矢量的

方向的矢量的

问题描述:

如果我有:方向的矢量的

a=magic(9); 

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

+0

但(1,1)和(2,2)是标量,那么它们之间怎么会有方向?你的意思是让X分量为(1,1)而Y分量为(2,2)所产生的向量? – Dan 2012-08-01 10:02:36

+0

我如何创建你提到的这种矢量? – brucezepplin 2012-08-01 10:24:43

+0

如你所说,在这种情况下vec = [a(1,1)a(2,2)] – 2012-08-01 10:36:34

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)) 
+0

谢谢,这就是我一直在寻找的 – brucezepplin 2012-08-01 12:06:16

计算方向正确的方法是使用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参数的符号,并添加pi每当它是负的。