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