Files
netease-modsdk-wiki/docs/mconline/90-知识库获奖教程/4-SDK实用技巧/2-获取2个角度之间的最短旋转间隔.md
boybook 760c2dd9ad 2.6
2025-12-01 20:59:16 +08:00

52 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 获取2个角度之间的最短旋转间隔
> 本篇教程获得第一期知识库优秀教程奖。
>
> 获奖作者:素笺淡墨。
一般最常见的角度应该划分为0 ---> 360360 ---->0180----> 0 <—— -180。
在这种情况下,假设,我们以三百六十为基准。-350到360之间如果只是单纯的相减返回的肯定不是最快的距离。
毕竟-350其实就相当于-10而三百六十就相当于0。他们之间的最近距离一定是十。
在这种情况下我们需要获取最近的距离我们一定要先把所有的角度让它小于180并且 >-180。
也就是a代表角度 rx或者ry。
```python
if a>180:
a+=-360
if a<-180:
a+=360
```
至于为什么要这样,是因为如果这个当前的角度超过一百八十,那他一定是绕到了另一半的区域了。因为我上面的取值范围是 -180 ----- 0 ----- 180。
在这种情况下180度和-180度实际是相等的。
也就是在一个圆圈内180和-180这两个点它们重叠了。
这两个点要是有任何一方超过一百八这个数字,那么他就会到达另一边。
也就是说-181其实就等于179。这样子就能确保他们一定会处于一百八十以内。
做完这一步之后,你会发现-179度和180度这两个角度如果进行相减还是无法获得最近的距离。
因为按照我上面所说这两个角度他们的相差一定是一。
在这种情况下我们还需要进行一步处理那就是如果这两个角度他们之间的相差大于一百八十那就代表这两个角度之间一定存在一个正和一个负数。因为正常情况下按照我上面那一步把角度限制为一百八十的话0----180最大就是一百八十。
那么我们就把第一个角度转换成第二个角度的同类型,也就是如果第二个角度它是负数那么我们就把第一个角度转换成负数。如果第二个角度是正数第一个角度是负数,那么我们就把第一个角度转换成正数。
```python
def func(a, b):
if abs(a-b)>180:
if b>0:
a+=360
else:
a+=-360
return (a,b)
```
这个时候返回的ab两个值你再将它们相减就会得到一个最近的角度间隔。