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