Тригонометрические соотношения для углов больше 360.

StackOverflow https://stackoverflow.com/questions/887889

  •  23-08-2019
  •  | 
  •  

Вопрос

Можно ли использовать Sin(720) или Cos(1440) (углы в градусах)?Будь то в компьютерном программировании или в какой-либо другой ситуации?В целом, есть ли использование греха/косинуса/загара любого угла более 360?

В физике мы много используем точечные продукты и продукты перекрестия, но даже они требуют углов менее чем на 180 градусов.

Привет всем, я знаю, как их вычислить ....Я хочу знать, пригодятся ли они когда-нибудь????Когда я когда -нибудь сталкиваюсь с ситуацией, когда мне нужно вычислить грех (440), например ???

Это было полезно?

Решение

Я видел, как при выполнении угловой арифметики возникали такие вещи:

float angleOne = 150;
float angleTwo = 250;

//...

float result = Sin(angleOne + angleTwo); // Sin(400)
float result = Sin(angleOne - angleTwo); // Sin(-100)

В этом (надуманном) примере это кажется очевидным, но когда вы вычисляете угол на основе произвольных поворотов нескольких объектов, вы не всегда можете знать, какие числа вы получите.Представьте себе, например, расчет положения игрока в 3D-игре, когда он стоит на вершине вращающейся платформы.

Другие советы

И по математике, и по программированию:

Sin(x) = Sin(x % 360)

Как указывалось в другом ответе, углы больше 360 представляют собой один или несколько полных оборотов по кругу плюс часть по модулю.В некоторых обстоятельствах это может иметь физический смысл.

Также при выполнении тригонометрических расчетов следует учитывать этот факт.Например:

sin(a)*cos(a) = (1/2)*sin(2a)

При a>180 вы получите грех угла больше 360.

Кстати, посмотрите здесь.

Каждый раз, когда вы имеете дело с техникой взаимодействия с пользователем, вполне возможно, что они подтолкнут вас за пределы 0 или 360 градусов.Представьте, что вы делаете игру с турелью.В настоящее время он указывает на 359 градусов, и пользователь дергает джойстик вправо:теперь он указан на 361 градус.Если вы неправильно реализуете угловое представление, внезапно орудие начнет быстро поворачиваться почти на 360 градусов влево.

Я прогнозирую, что пользователи будут... расстроенный с этим багом.

Возникают всевозможные проблемы угол Эйлера представления системы отсчета, которые важны в играх, симуляциях и реальном управлении устройствами. Блокировка подвеса — это серьезная проблема в реальном управлении вращающимися устройствами (в моей жизни это была проблема с устройствами панорамирования/наклона камеры).Ошибка «быстрого вращения» когда-то была очень неприятной проблемой в системе автопилота небольшой лодки — представьте, что стальной трос очень плотно обматывает рулевую рубку (т. е. вы не хотите там стоять).

Были случаи, когда обычные математические расчеты означали, что вы в конечном итоге «пересекли круг» один или несколько раз, и если вы сохраните математику простой, ваши углы могут быть больше 360.Лично мне нравится после таких операций нормализовать углы до значений от 0 до 360 или от -180 до 180, но это не имеет большого значения.

Иногда большее число действительно может что-то представлять.В качестве тривиального примера представьте себе инструкции по открытию классического сейфа с кодовым номером.Вам нужно повернуть диск несколько раз, чтобы получить следующие инструкции:

   turn(800);  // Twice around plus another 20 degrees
   turn(-500); // Once around the other direction plus 140 degrees
   turn(40);   // Dial in the last digit

В этом контексте взятие sin или cos скажет вам кое-что об конечном положении циферблата, но вы потеряете информацию о том, сколько поворотов было задействовано.

Одно вращение вокруг круга составляет 360 градусов или 2pi радианы.

Тригонометрические функции такие как синус и косинус, будут «заворачиваться», когда они достигнут 360 градусов, и действовать так же, как при 0 градусах.В основном происходит следующее:

angle_in_unit_circle = angle mod 360

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

Это «обертывание» можно увидеть, представив функции синуса, косинуса и тангенса с помощью прямоугольного треугольника, вписанного в единичный круг, и это поведение делает эти функции периодический потому что они будут повторять свои шаблоны снова и снова.

В Википедии есть обширная статья на эту тему. Тригонометрические функции, так что, возможно, на это стоит обратить внимание.

Применение

С точки зрения использования, я не могу сразу придумать хороший пример, за исключением, возможно, представления местоположения частицы в определенный момент времени в полярная система координат, где угол θ зависит от времени t:

r(θ(t)) = t    where θ(t) = t

для значений t от 0 до 720, которые затем можно было бы представить в виде Декартова система координат как:

x(t) = r sin(θ(t)) == t sin(t)
y(t) = r cos(θ(t)) == t cos(t)

Частица будет двигаться по спирали, в зависимости от времени. t.В этом случае будут рассчитаны синус и косинус углов, превышающих 360.

(И моя математика заржавела, поэтому, если в приведенных выше уравнениях есть какие-либо ошибки, пожалуйста, дайте мне знать!)

На синусоидальной кривой Sin(720) == Sin(0) (и т. д.), поэтому я ожидаю, что любая приличная реализация этих функций будет обрабатывать градусы «больше» 360.Существует множество причин для достижения угла больше 360 или меньше 0.

Углы вне диапазона «главных углов» [-180,180) по сути являются псевдонимами друг друга (по модулю 360 градусов) и не имеют физического различия.

С математической/инженерной точки зрения, если у вас есть процесс, в котором количество оборотов важно и его необходимо отслеживать (например,мотор, который крутится туда-сюда), то 0 градусов и 720 градусов — это не одно и то же.Синус и косинус — это просто периодические функции, поэтому они имеют одно и то же значение каждые 360 градусов.Если у вас есть частица, совершающая равномерное круговое движение, где x(t) = A cos (ωt + φ) и y(t) = A sin (ωt + φ), то фазовый угол θ = (ωt + φ) будет равен быть каким угодно, будь то 0, 720 градусов, 82144,33 градуса или что-то еще.

Таким образом, функции cos(θ) и sin(θ) просто используются для вычисления координат x и y, независимо от значения θ.У вас нет выбора: если θ составляет 82144,33 градуса, то вам нужно вычислить синус и косинус этого угла.

Я играю в компьютерную игру под названием Garry's Mod, и бывают моменты в игре, когда при программировании мне нужно простое решение, позволяющее объекту постоянно двигаться по постоянному кругу.Для этого я использую синус и косинус постоянно увеличивающегося таймера, измеряющего количество времени, прошедшее с момента запуска игры.

Синус T (время) равен значению орбитального пути X, а косинус T равен значению орбитального пути Y (X и Y находятся на трехмерной координатной плоскости, а Z в данный момент не используется).

Пример:

T = 1000 клещей x = sin (t) y = cos (t)

Итак, X равен 0,8268795405320025 в этот момент времени, а Y равен 0,15466840618074712.

Теперь предположим, что количество времени выросло до 1500.X будет -0,9939019569066535, а Y = -0,11026740251372914.

Короче говоря, оно будет постоянно колебаться от 1 до -1, что дает мне возможность умножить это значение, скажем, на 100 и сделать координатную плоскость локальной для положения моего персонажа, тогда я могу указать запрограммированному выражению переместить объект на основе эти координаты, и он будет двигаться по постоянной круговой траектории вокруг меня.

Тада.Кто сказал, что нельзя учиться с помощью видеоигр?

Потому что sin(x) = sin(x mod 360°) и cos(x) = cos(x mod 360°) вы можете использовать любое значение в расчете, но вы также можете нормализовать его по диапазону [0°,360°) или любой другой диапазон 360°.Это просто зависит от использования, имеют ли большие углы четко определенное значение или нет.

Процессоры, скорее всего, нормализуют вычисления до диапазона 90° или даже меньше, и извлекайте все остальные значения из этого небольшого диапазона.

Когда будут аргументы, превышающие 360° происходить?

Они естественным образом возникают при моделировании периодических функций, зависящих от времени или пространства.

Ваш вопрос не имеет особого смысла, поскольку вы, кажется, знаете разницу здесь:

Нет, вам никогда не придется «вычислять» Sin(720), как и вам не придется «вычислять» Sin(0).Вам нужно взглянуть на определение функции Sinus, чтобы полностью понять, что происходит под покровом - и когда это понятно, для любого становится понятным, почему Sin(0) = Sin(720) - ничего волшебного не происходит. , здесь (логически) нет Angle = FullAngle % 360, все дело в определении того, что должна делать функция.

См. Википедию

@dta, я думаю, люди немного запутались.Вы спрашиваете, если это когда -нибудь «полезно». Я бы сказал: «Это не имеет значения, потому что вы просто переключаете угол на правильный диапазон при выполнении расчета». Конечно, есть случаи, когда вам нужно знать, как далеко от 0 градусов, который объект повернулся, учитывая несколько вращений.Но помимо этих случаев удобнее интерпретировать углы в обычном диапазоне 0–360.Большинство людей интуитивно чувствуют, какое направление соответствует углам в этом нормальном диапазоне.В каком направлении указывают 170 234 градуса?То же, что 314 градусов.

Как сказали @Chris Arguin и другие, полезен ли вам грех угла больше 360° (или, если уж на то пошло, меньше -360°), зависит от того, нужна ли вам информация о вращениях (или их долях), представленная выражением разница между углом и углом %360°.

Кроме того, поскольку вы получаете один и тот же ответ, вы сэкономите немного времени обработки, если вызовете sin(angle) вместо sin(angle%360), особенно если вы выполняете много вычислений в цикле.

OTOH, @Scottie T отмечает, что если кому-то важно знать, куда в окружности указывает ваш угол, люди обычно могут интуитивно определить положение угла с абсолютным значением 360 или меньше, чем для больших углов.

Во многих случаях необходимы углы за пределами [0,360].Мне нравится идея кодового замка.Здесь часто можно увидеть как положительные, так и отрицательные углы за пределами простого диапазона [0,360] градусов.

Формулы нескольких углов часто играют важную роль в математике.Триггерные функции используются не только в треугольниках.Они встречаются в самых разных местах, например, в рядах Фурье, в схемах сжатия изображений или при решении дифференциальных уравнений.С точки зрения вычислений это правда, что вы всегда можете использовать mod, чтобы уменьшить диапазон триггерной функции до значения по умолчанию.Однако редко бывает так, чтобы углы всегда находились в этом номинальном диапазоне.

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

т.е. хотя это правда, что sin(370) == sin(10), и пользователь может выполнить этот перевод самостоятельно, он может не захотеть этого по той или иной причине (см. пример «болта» в комментариях к наиболее рейтинговым ответ), поэтому функция должна иметь возможность обрабатывать любое значение.

Также используются углы выше 360 градусов, например.для описания трюков на сноуборде:

http://en.wikipedia.org/wiki/List_of_snowboard_tricks#Spins

Итак, вы видите, что существуют различные примеры из реальной жизни, где вы используете более высокие углы для описания вращения объекта.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top