Представления углов и угловые единицы измерения

Угловые измерения имеют много различных ролей в обработке геопространственных данных. Для примера они используются для задания

  • Абсолютные положения - широты и долготы

  • Относительные положения - азимуты, подшипники и углы возвышения

  • Сферические расстояния между местоположениями точек

Абсолютные положения выражены в geodetic coordinates, которые на самом деле являются углами между линиями или плоскостями на ссылку сфере или эллипсоиде. Относительные положения используют модули угла, чтобы выразить направление между одним местом на ссылку теле от другого. Сферические расстояния определяют, насколько далеко находятся друг от друга два места с точки зрения угла, нижележащего по дуге большого круга. На несферических опорных телах расстояния обычно даются в линейных модулях, таких как километры (потому что на них длины дуг больше не пропорциональны подрезанному углу).

Радианы и степени

Базовый модуль измерения углов в MATLAB® - радиан. Например, если переменная theta представляет угол и вы хотите взять его синус, можно использовать sin(theta) если и только если значение theta выражено в радианах. Если переменная представляет значение угла в степенях, то перед принятием синуса необходимо преобразовать значение в радианы. Для примера,

thetaInDegrees = 30;
thetaInRadians = thetaInDegrees * (pi/180)
sinTheta = sin(thetaInRadians)
Как показано выше, можно масштабировать степени до радианов, умножая на pi/180. Тем не менее, вы должны рассмотреть использование deg2rad для этой цели:
thetaInRadians = deg2rad(thetaInDegrees)
Точно так же можно выполнить противоположное преобразование, применив обратный коэффициент,
thetaInDegrees = thetaInRadians * (180/pi)
или при помощи rad2deg,
thetaInDegrees = rad2deg(thetaInRadians)
Практика использования этих функций имеет два существенных преимущества:

  • Это уменьшает вероятность человеческой ошибки (например, вы можете ввести «pi/108» по ошибке)

  • Это ясно сигнализирует о вашем намерении - важно делать, если другие когда-либо читали, изменяли или отлаживали ваш код

Функции rad2deg и deg2rad являются очень простыми и эффективными, и работают с векторным и более высоко-размерным входом, а также скалярами.

Угловые единицы по умолчанию и переменные модули

В отличие от тригонометрических функций MATLAB, функции Mapping Toolbox™ не всегда предполагают, что угловые аргументы находятся в модулях измерения радиан.

Низкоуровневые служебные функции, предназначенные для базовых блоков более сложных признаков или приложений, работают только в модули радианов. Примеры включают функции unwrapMultipart и meridianarc.

Многие функции высокого уровня, включая distance, может работать в степенях или радианах. Их интерпретация углов контролируется 'angleunits' входной параметр. (angleunits может быть либо 'degrees' или 'radians', и обычно может быть сокращено.) Эта гибкость балансирует удобство и эффективность, хотя это означает, что вы должны позаботиться, чтобы проверить, какие допущения делает каждая функция о своих входах.

Степени, минуты и секунды

Во всех расчетах Mapping Toolbox, которые включают углы в степенях, используются числа с плавающей запятой (обычно MATLAB класс double), что позволяет использовать целочисленные и дробные значения и рациональные приближения к иррациональным числам. Однако несколько традиционных обозначений, которые всё ещё широко используются, представляют углы как пары или триплеты чисел, используя минуты дуги (1/60 степени) и секунды дуги (1/60 минуты):

  • Обозначение в градусах-минутах (DM), например, 35 ° 15 ", равное 35,25 °

  • Градусы-минуты-секунды обозначения (DMS), например, 35 ° 15 "45" ", равное 35,2625 °

В представлении градусов-минут угол разделяется на три отдельные части:

  1. Знак

  2. Неотрицательный, целочисленный компонент степеней

  3. Неотрицательная составляющая минут, реальное значение и в полуоткрытом интервале [0 60)

Для примера -1 радиан представлен знаком минус (-) и числами [57, 17.7468...]. (Дробь в минутной части аппроксимирует иррациональное число и округлится здесь в целях отображения. Эта тонкая точка повторяется в следующем разделе.)

Тулбокс включает функцию degrees2dm для выполнения преобразований этого сорта. Можно использовать эту функцию для экспорта данных в форме DM либо в целях отображения, либо для использования другим приложением. Для примера,

degrees2dm(rad2deg(-1))
ans =

  -57.0000   17.7468
В более общем плане, degrees2dm преобразует одноколоночный вход в пару столбцов. Вместо того, чтобы хранить знак в отдельном элементе, degrees2dm применяется к первому ненулевому элементу в каждой строке. Функция dm2degrees преобразуется в противоположном направлении, получая действительный вектор-столбец с градусами из массива с двумя столбцами, имеющего целочисленные степени и столбец с вещественными минутами. Таким образом,
dm2degrees(degrees2dm(pi)) == pi
ans =

     1
Точно так же в представлении градусов-минут-секунд угол разделяется на четыре отдельные части:

  1. Знак

  2. Неотрицательные целочисленные степени компонент

  3. Минутный компонент, который может быть любым целым числом от 0 до 59

  4. Неотрицательная составляющая минут, реальное значение и в полуоткрытом интервале [0 60)

Для примера -1 радиан представлен знаком минус (-) и числами [57, 17, 44.8062...], которые можно увидеть с помощью функции Mapping Toolbox degrees2dms,

degrees2dms(rad2deg(-1))
ans =

  -57.0000   17.0000   44.8062
degrees2dms работает, как degrees2dm; он преобразует одноколоночный вход в трехколоночную форму, применяя знак к первому ненулевому элементу в каждой строке.

Четвертая функция, dms2degrees, подобно dm2degrees и поддержки импорт данных путем создания векторов-столбцов степеней с реальным значением из массива с целочисленными степенями столбцом, столбцом с целым значением минут и столбцом с реальным значением секунд. Как отмечается, эти четыре функции, degrees2dm, degrees2dms, dm2degrees, и dms2degrees, конкретно касаются формы их входов; в этом отношении они отличаются от других функций преобразования углов в тулбоксе.

Тулбокс не использует внутреннее представление DM или DMS. Функции преобразования dm2degrees и dms2degrees предоставляются только как инструменты для импорта данных. Точно так же, degrees2dm и degrees2dms применяются только для отображения географических координат на картах, публикации значений координат и для форматирования данных для экспорта в другие приложения. Методы для этого обсуждаются ниже в Форматировании Широт и Долготы.

Преобразование угловых Модулей, которые изменяются во время исполнения

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

Почти во всех случаях - даже в то время, когда вы кодируете - вы знаете или вход, или модули угла назначения. Когда вы это делаете, можно использовать одну из следующих функций:

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

function [x, y] = sinusoidal(lat, lon, angleunits)
  [lat, lon] = toRadians(angleunits, lat, lon);
  x = lon .* cos(lat);
  y = lat;
Каждый раз angleunits оказывается 'radians' во время исполнения, toRadians функция не имеет никакой реальной работы; все функции в этой группе эффективно обрабатывают такие ситуации «no-op».

В очень редких образцах, когда вы должны кодировать приложение или функцию MATLAB, в которой модулей обоих углов входа и углов выхода остаются неизвестными до времени выполнения, вы все еще можете выполнить преобразование, используя unitsratio функция. Для примера,

fromUnits = 'radians';
toUnits = 'degrees';
piInDegrees = unitsratio(toUnits, fromUnits) * pi
piInDegrees =

   180