我有两个向量,我想计算它们之间的角度。
一个向量被定义为两个点P1(x1,y1)
和P2(x2,y2)
。另一个向量定义为点P3(x3,y3)
及其相对于x轴的航向角(比如theta)。
我知道我需要得到它们的产品,但是如何以两点的方式获得第二个向量?
实际上我试过使用atan2(),但是当角度在pi(+ - epsilon)附近时,它会从pi跳到-pi,这是不希望的,我不能简单地通过添加2 * pi来修复它角度小于零。在这种情况下,我的模拟从+ pi跳到-pi。
我正在使用C-mex S-functions
,但任何pseudocode
都可以。
非常感谢
答案 0 :(得分:1)
从here获取全部内容。请阅读那里的讨论以了解这个主题。
假设a = [x1,y1]和b = [x2,y2]是两个向量,其基数为 原点,逆时针测量它们之间的非负角度
给出了a到b
angle = mod(atan2(x1*y2-x2*y1,x1*x2+y1*y2),2*pi);
对于MATLAB实现,mod
可以替换为rem
:
angle = rem(atan2(x1*y2-x2*y1,x1*x2+y1*y2),2*pi);
量,x1 * y2-x2 * y1和x1 * x2 + y1 * y2分别是从向量a到向量b的逆时针角度的正弦和余弦乘以它们的范数的乘积 - 即,他们的交叉产品和点积限于二维。 ' atan2'函数然后给出它们之间的角度,范围从-pi到+ pi,以及' mod'操作将其更改为0到2 * pi。
请不要使用theta = acos(dot(a,b))
等公式,因为pi
和-pi
附近存在准确性问题。