【发布时间】:2021-03-23 08:02:17
【问题描述】:
主题:Python 使用罗盘传感器输入:卡在计算中
我正在读取一个名为“开始”的指南针,旋转大约 360 度并读取“结束”。我想知道开始和结束之间的增量。不是转了多少度,而是结束与开始的不同。
degrees_start = 0
degrees_end = 359
#degrees_diff = degrees_end - degrees_start
degrees_diff = (degrees_start-degrees_end) % 360
print(degrees_diff)
'''
test set
degrees_start, degrees_end, deg_diff(expected), deg_diff(observed)
10, 20, +10, +10
20, 10, -10, -10
350, 10, +20, -340
10, 350, -20, +340
0, 359, -1, +359
359, 0, +1, -359
'''
算法很简单:end – start = delta
但我被困在 359 和 1 的边界。示例开始 10,结束 350。或开始 350 结束 10。我尝试了许多算术组合,但没有想出一个始终正确的公式。
有什么建议吗?谢谢。
以下部分答案的测试:
# test 10,350 -> correct answer -> -20 i.e. 20 deg short of full circle
#degrees_diff = degrees_end - degrees_start # test 10,350 -> 340
#degrees_diff = (degrees_start-degrees_end) % 360 # test 10,350 -> 20
#degrees_diff = (degrees_end - degrees_start) % 360 # test 10,350 -> 340
【问题讨论】:
-
350 -> 10 的预期输出是多少?最好是显示您的代码、示例输入和预期输出,即minimal reproducible example
-
开始 340,结束 10 将是 + 30。换句话说,转弯继续超过开始 20 度到 0,然后再 10 度 = +30。
-
(开始 - 结束)% 360
-
这能回答你的问题吗? Calculate difference between two angles
-
buran:感谢您对 mre 的注意 - 将来会一直这样做 链接:现在尝试理解和测试它。
标签: python algorithm compass-geolocation bbc-microbit