Угловые измерения имеют много различных ролей в обработке геопространственных данных. Для примера они используются для задания
Абсолютные положения - широты и долготы
Относительные положения - азимуты, подшипники и углы возвышения
Сферические расстояния между местоположениями точек
Абсолютные положения выражены в 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 °
В представлении градусов-минут угол разделяется на три отдельные части:
Знак
Неотрицательный, целочисленный компонент степеней
Неотрицательная составляющая минут, реальное значение и в полуоткрытом интервале [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
Знак
Неотрицательные целочисленные степени компонент
Минутный компонент, который может быть любым целым числом от 0 до 59
Неотрицательная составляющая минут, реальное значение и в полуоткрытом интервале [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