Наименьшая разница между 2 углами

Echo:

Это оператор не функция Нет возвращаемого значения

Не требуется скобки

Не печатать массив

Печать

Реальная функция

Тип возврата 1

Требуется скобки

Не печатать массив

Print_r

Печать в удобочитаемом формате

Строка не в кавычках

Не детализированная информация о переменной типа типа и всех

var_dump

Вся информация о дампе переменной типа типа и подэлемента

123
задан Tom J Nowell 9 July 2017 в 21:46
поделиться

3 ответа

Если ваши два угла - x и y, то один из углов между ними - abs ( х - у). Другой угол равен (2 * PI) - абс (x - y). Таким образом, значение наименьшего из двух углов:

min((2 * PI) - abs(x - y), abs(x - y))

Это дает вам абсолютное значение угла и предполагает, что входные данные нормализованы (то есть: в диапазоне [0, 2π) ) .

Если вы хотите сохранить знак (т.е. направление) угла, а также принять углы за пределами диапазона [0, 2π) , вы можете обобщить вышеизложенное. Вот код Python для обобщенной версии:

PI = math.pi
TAU = 2*PI
def smallestSignedAngleBetween(x, y):
    a = (x - y) % TAU
    b = (y - x) % TAU
    return -a if a < b else b

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

35
ответ дан 24 November 2019 в 00:41
поделиться

x - целевой угол. y - источник или начальный угол:

atan2(sin(x-y), cos(x-y))

- возвращает подписанный угол дельты. Обратите внимание, что в зависимости от вашего API порядок параметров функции atan2() может быть разным.

.
136
ответ дан 24 November 2019 в 00:41
поделиться

Я сталкиваюсь с проблемой предоставления подписанного ответа:

def f(x,y):
  import math
  return min(y-x, y-x+2*math.pi, y-x-2*math.pi, key=abs)
8
ответ дан 24 November 2019 в 00:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: