我正在制造一种带有指南针的机器人车辆。从车辆当前的方向(以度为单位)开始,我想使用指南针将其沿任一方向旋转90度。
我认为最好的方法是在“ while”循环内以增量方式旋转车辆,并在每次旋转增量后测试其是否已移动90度。
但是,虽然处理两个正点之间的转换很简单,但是对于涉及从0到360的转换来说,这将变得具有挑战性。
换句话说,此左旋转代码由于明显的原因而失败:
let startingPoint = 30 // in degrees
let endPoint = startingPoint - 90
while currentPoint > endPoint {
rotateLeft()
}
是否存在一个方程,可以在越过360/0边界时进行比较?
答案 0 :(得分:0)
您可以检查差异,而不是绝对值。
要确定差值是否超出90范围,您可以使用公式说明任意角度,包括从0过渡(不要忘记角度应该以弧度为单位)
if Cos(startingangle - currentangle) <=0 then
absolute difference is equal or more than Pi/2 (90 degrees)
此处显示粗箭头(忽略轴标签或将其除以4)Cos
的零起始角与+-30
度角的差(适用于任何起始角)
Python演示
import math
def AngleInRange(value, central, arange):
value = math.radians(value)
central = math.radians(central)
arange = math.radians(arange)
return (math.cos(value - central) >= math.cos(arange))
for a in range (100, 220, 15): #through 180
print(a, AngleInRange(a, 150, 45))
for a in range (-40, 40, 10): #through 0
print(a, AngleInRange(a, -10, 20))
100 False
115 True
130 True
145 True
160 True
175 True
190 True
205 False
-40 False
-30 True
-20 True
-10 True
0 True
10 True
20 False
30 False