Итерация к определенному углу на окружности - PullRequest
0 голосов
/ 27 января 2019

Я строю роботизированное транспортное средство с бортовым компасом. Начиная с текущей ориентации автомобиля в градусах, я бы хотел повернуть его на 90 градусов в любом направлении, используя компас.

Я полагаю, что лучший способ сделать это - вращать автомобиль с шагом в пределах цикла "while" и проверять после каждого приращения вращения, не сместился ли он на 90 градусов.

Однако, хотя иметь дело с переходами между двумя положительными точками просто, это становится сложной задачей с переходами, которые включают переход от 0 до 360.

Другими словами, этот код для левого вращения не работает по очевидным причинам:

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

Существует ли уравнение, которое позволит это сравнение при пересечении границы 360/0?

1 Ответ

0 голосов
/ 27 января 2019

Вы можете проверить разницу, а не абсолютное значение.

Чтобы определить, находится ли разница за пределами диапазона 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...