Python 罗盘传感器从359变为1,如何计算此变化为;1“向上”;,而不是",;358向下“;?
我有一个带有罗盘传感器的项目,每秒输出一次以度为单位的航向。值的更改将显示给用户 因此,当传感器从283度旋转到285度时,程序显示“2向上”,当传感器从163度旋转到152度时,程序显示“11向下” 我的问题是旋转超过359度。当compas从358度变为1度时,程序显示“357向下”,但我希望它显示“3向上”。我不知道如何做到这一点 另一方面也是一个问题,即从5到359,返回“354向上”,而不是“6向下” 这是我的密码:Python 罗盘传感器从359变为1,如何计算此变化为;1“向上”;,而不是",;358向下“;?,python,math,sensors,integer-overflow,Python,Math,Sensors,Integer Overflow,我有一个带有罗盘传感器的项目,每秒输出一次以度为单位的航向。值的更改将显示给用户 因此,当传感器从283度旋转到285度时,程序显示“2向上”,当传感器从163度旋转到152度时,程序显示“11向下” 我的问题是旋转超过359度。当compas从358度变为1度时,程序显示“357向下”,但我希望它显示“3向上”。我不知道如何做到这一点 另一方面也是一个问题,即从5到359,返回“354向上”,而不是“6向下” 这是我的密码: # Input from compas sensor: oldhdg
# Input from compas sensor:
oldhdg = 358
newhdg = 1
# Calculating and displaying the value change:
if oldhdg == newhdg:
change = 0
flowdir = 'stay'
elif oldhdg > newhdg:
change = oldhdg-newhdg
flowdir = 'down'
elif newhdg > oldhdg:
change = newhdg-oldhdg
flowdir = 'up'
print(f'{change} {flowdir}')
输出:
357 down
>>>
从整体上考虑。所有三角洲都有两个值:“向上”和“向下”。您希望在所有情况下都返回这两个值中的较小值。编写一个这样做的函数 标题中的def更改(旧、新): “”“返回两个数据点之间的标题更改 >>>更改标题(100、99)中的内容: -1 >>>更改标题(99100): 1. >>>更改标题(358,2): 4. >>>更改标题(2358): -4 """ delta=新的旧的 最小#U变化=(增量+180)%360-180#夹紧至[-180,180) 返回最小的零钱 然后,您可以格式化以使现有值与另一个函数相匹配:
def显示标题更改(更改):
返回f“{abs(change)}{'up'如果change>=0,则返回'down'}”
整体考虑。所有增量都有两个值:“向上”和“向下”。您希望在所有情况下都返回这两个值中的较小值。编写一个函数来实现这一点
标题中的def更改(旧、新):
“”“返回两个数据点之间的标题更改
>>>更改标题(100、99)中的内容:
-1
>>>更改标题(99100):
1.
>>>更改标题(358,2):
4.
>>>更改标题(2358):
-4
"""
delta=新的旧的
最小#U变化=(增量+180)%360-180#夹紧至[-180,180)
返回最小的零钱
然后,您可以格式化以使现有值与另一个函数相匹配:
def显示标题更改(更改):
返回f“{abs(change)}{'up'如果change>=0,则返回'down'}”
您打算如何区分从358到2通过0的(慢速)转向和从358到2通过180的(快速)转向?@HighPerformanceMark足够慢的时间可能无关紧要。您打算如何区分从358到2通过0的(慢速)转向和(快速)转向通过180?高性能标记从358转为2,时间足够慢,这可能无关紧要