向圆上的特定角度迭代

时间:2019-01-27 07:03:29

标签: math geometry trigonometry

我正在制造一种带有指南针的机器人车辆。从车辆当前的方向(以度为单位)开始,我想使用指南针将其沿任一方向旋转90度。

我认为最好的方法是在“ while”循环内以增量方式旋转车辆,并在每次旋转增量后测试其是否已移动90度。

但是,虽然处理两个正点之间的转换很简单,但是对于涉及从0到360的转换来说,这将变得具有挑战性。

换句话说,此左旋转代码由于明显的原因而失败:

let startingPoint = 30 // in degrees
let endPoint = startingPoint - 90
while currentPoint > endPoint {
    rotateLeft()
}

是否存在一个方程,可以在越过360/0边界时进行比较?

1 个答案:

答案 0 :(得分:0)

您可以检查差异,而不是绝对值。

要确定差值是否超出90范围,您可以使用公式说明任意角度,包括从0过渡(不要忘记角度应该以弧度为单位)

if Cos(startingangle - currentangle) <=0 then
   absolute difference is equal or more than Pi/2 (90 degrees)

此处显示粗箭头(忽略轴标签或将其除以4)Cos的零起始角与+-30度角的差(适用于任何起始角)

enter image description here

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