exponenta event banner

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

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

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

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

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

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

Радианы и градусы

Основной единицей измерения углов в MATLAB ® является радиан. Например, если переменная theta представляет угол и требуется принять его синус, можно использоватьsin(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', и, как правило, может быть сокращено.) Эта гибкость уравновешивает удобство и эффективность, хотя это означает, что вы должны быть осторожны, чтобы проверить, какие предположения каждая функция делает о своих входных данных.

Градусы, минуты и секунды

Во всех вычислениях панели инструментов отображения, включающих углы в градусах, используются числа с плавающей запятой (как правило, двойные для класса MATLAB), что позволяет использовать целочисленные и дробные значения и рациональные приближения к иррациональным числам. Однако несколько традиционных обозначений, которые все еще широко используются, представляют углы как пары или тройки чисел, используя минуты дуги (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