Угловые представления и угловые единицы

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

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

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

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

Абсолютные позиции выражены в 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)
Практика использования этих функций имеет два значительных преимущества:

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

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

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

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

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

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

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

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

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

  • Обозначение минут степеней (DM), e.g., 35 ° 15’, равняются 35,25 °

  • Обозначение мелких секунд степеней (DMS), e.g., 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 преобразует в противоположном направлении, производя вектор-столбец с действительным знаком степеней массива 2D столбца, имеющего целочисленные степени и мелкий столбец с действительным знаком. Таким образом,
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, следят за формой их входных параметров; в этом отношении они отличны от других угловых функций преобразования в тулбоксе.

Тулбокс не делает внутреннего пользования представления DMS или DM. Функции преобразования 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 функция имеет не действительную работу, чтобы сделать; все функции в этой группе обрабатывают такие ситуации "с нет" эффективно.

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

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

   180