计算两个角度之间的绝对差值

6

我有两个角度a和b,我想计算它们之间的绝对差。例如:

>> absDiffDeg(360,5)
ans = 5
>> absDiffDeg(-5,5)
ans = 10
>> absDiffDeg(5,-5)
ans = 10
3个回答

10
归一化差异,不需要进行abs操作,因为mod(x,y)会采用y的符号。
normDeg = mod(a-b,360);

这将是一个介于0-360之间的数字,但我们希望得到介于0-180之间的最小角度。最简单的方法是:
absDiffDeg = min(360-normDeg, normDeg);

4
使用unwrap如何?这里试一下:
absDiffDeg = @(a,b) abs(diff(unwrap([a,b]/180*pi)*180/pi));

您好,


3

在进行角度计算时,首先将它们标准化非常有用。这个函数将所有的角度标准化到 (-180,180] 范围内:

 normalizeDeg=@(x)(-mod(-x+180,360)+180)

现在有了这个规范化函数,就可以计算绝对差了:
absDiffDeg=@(a,b)abs(normalizeDeg(normalizeDeg(a)-normalizeDeg(b)))

1
这是一个很好的答案,虽然花了我一些时间才理解它 :P。简化它的一种方法是以0-360而不是-180-180来定义normalize。normalizeDeg=@(x)(mod(x,360)) 这样做不太标准,但也解决了问题。 - Trogdor
1
你是对的,这段代码可以进一步简化。此外,在这里规范化输入并不是必要的,但通常是一个好习惯,因为它简化了测试过程。 - Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接