Радианная мера угла 📐
Открой Python, набери import numpy as np и попроси синус тридцати градусов: np.sin(30). Ты ожидаешь увидеть ровно $0{,}5$ — школьное значение, которое помнят даже те, кто ненавидел тригонометрию. А получаешь -0.988.... Ни ошибки, ни предупреждения, ни красной строчки в консоли. Просто другое число. И если этот вызов сидит где-то внутри твоего препроцессинга признаков или функции поворота, модель будет обучаться на мусоре, а ты полдня будешь искать баг совсем в другом месте.
Всё дело в единицах. NumPy, PyTorch, TensorFlow, JAX, стандартная библиотека math, шейдеры в графике, физические движки — вообще вся вычислительная математика — принимают углы в радианах, а не в градусах. И это не соглашение из вредности, не «так исторически сложилось» и не американская привычка. Радиан — единственная мера угла, при которой формулы анализа выглядят чисто: производная синуса равна косинусу, ряд Тейлора для $\sin x$ начинается с самого $x$, а предел $\dfrac{\sin x}{x}$ при $x \to 0$ равен единице. В градусах каждая из этих формул обрастает уродливым множителем $\dfrac{\pi}{180} \approx 0{,}01745$, который пришлось бы таскать через все выкладки и через каждый шаг обратного распространения ошибки.
Давай разберёмся, что такое радиан по сути. Градус — величина договорная: кто-то когда-то решил разрезать круг на 360 частей, и мы этим пользуемся по инерции. Радиан же не выбирали — его вывели из самой окружности. Это угол, который «измеряет сам себя» через длину дуги, и потому он оказывается вшит в геометрию, а не наложен на неё сверху. Именно поэтому радианный угол — это просто число, без единиц измерения, которое можно подставлять в ряды, интегралы и матрицы без единого переводного коэффициента.
В этом уроке мы разберём радиан с нуля: откуда он берётся, как переводить градусы в радианы и обратно (быстро и без калькулятора для «красивых» углов), как радианная мера мгновенно даёт длину дуги и площадь сектора, что такое углы поворота больше полного оборота и отрицательные углы, и — главное — где радианы всплывают в реальной работе с данными: в косинусной близости эмбеддингов, в матрицах поворота, в позиционном кодировании трансформеров и в угловой скорости вращающихся штук. А следующим уроком мы поставим на этот фундамент единичную окружность и уже оттуда выведем все тригонометрические функции.
🎯 Ты узнаешь:
- Что такое радиан на самом деле и почему он равен примерно $57{,}3°$, а не какому-нибудь круглому числу
- Как за пару секунд переводить градусы в радианы и обратно — в уме, без калькулятора
- Почему формулы длины дуги $s = R\alpha$ и площади сектора $S = \tfrac{1}{2}R^2\alpha$ работают только в радианах
- Как приводить любой угол — хоть $1000°$, хоть $-8\pi/3$ — к промежутку $[0; 2\pi)$
- Почему numpy, torch и косинусная близость эмбеддингов живут в радианах, и как из-за градусов появляются молчаливые баги
История: откуда это взялось?
Начнём с градусов, потому что радиан родился как ответ на их неудобство. Деление круга на 360 частей пришло из Вавилона примерно за 2000 лет до нашей эры. У вавилонян была шестидесятеричная система счисления (отсюда же наши 60 минут в часе и 60 секунд в минуте), а число 360 удобно тем, что делится нацело на 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 18, 20, 24, 30, 36, 40, 45, 60, 72, 90, 120 и 180 — почти на всё, что нужно землемеру или астроному. Плюс год длится примерно 360 дней, и Солнце за сутки проходит по небу примерно один градус относительно звёзд. Практично — но абсолютно произвольно: в числе 360 нет ничего математического, это чистая бухгалтерия удобных делителей.
Первым, кто внятно сказал «а давайте измерять угол длиной дуги, которую он вырезает», был английский математик Роджер Котс — тот самый, что редактировал второе издание «Начал» Ньютона. В работе, написанной около 1714 года и опубликованной посмертно в 1722-м («Harmonia Mensurarum»), он показал, что при таком выборе меры угла формулы анализа становятся заметно проще, а константы перевода исчезают сами собой. Котс умер в 33 года, Ньютон сказал про него: «Если бы Котс был жив, мы бы что-нибудь узнали». Идею подхватили не сразу — почти полтора века она жила без имени.
Само слово «радиан» впервые попало в печать только в 1873 году: его использовал Джеймс Томсон, профессор Queen's College в Белфасте (и старший брат лорда Кельвина), в экзаменационных заданиях для студентов. Слово собрано из «radius» плюс окончание, и оно моментально прижилось, потому что называло ровно то, чем радиан и является: угол, отмеренный радиусом, уложенным вдоль дуги. К началу XX века радианная мера стала стандартом во всей высшей математике и физике.
А мостик в сегодня — прямее некуда. Когда в 2017 году авторы статьи «Attention Is All You Need» выписывали формулу позиционного кодирования $PE(pos, 2i) = \sin\!\left(\dfrac{pos}{10000^{2i/d}}\right)$, аргумент синуса там — чистое безразмерное число, то есть радианы. Когда ты считаешь косинусную близость двух эмбеддингов и хочешь превратить её в угол через np.arccos, ответ приходит в радианах. Когда GPU крутит вектор матрицей поворота — внутри радианы. Мера, придуманная ради красоты формул триста лет назад, оказалась единственной, на которой держится вся современная вычислительная математика.
Что такое радиан: угол, который меряет сам себя
Интуиция
Представь, что у тебя есть круглый стол радиусом $R$ и кусок верёвки ровно такой же длины $R$. Ты прикладываешь верёвку к краю стола и укладываешь её вдоль дуги — не по хорде, а именно изгибая по окружности. Верёвка «съест» кусочек края. Теперь проведи два радиуса из центра стола к началу и к концу этой верёвки. Угол между ними — это и есть один радиан.
Обрати внимание, что произошло. Мы не привлекали никаких внешних договорённостей — ни 360, ни 400 «градов», ни чего-либо ещё. Мы измерили угол его же собственной окружностью: сколько радиусов укладывается в дуге, столько и радиан в угле. Радиан — это отношение двух длин (дуги к радиусу), а отношение длин — безразмерное число. Именно поэтому радиан можно спокойно подставлять в $x^3/6$ или в экспоненту: там нет никакого «метра в кубе», угол в радианах — просто число.
И сразу же — ключевое следствие. Полная окружность имеет длину $2\pi R$. Сколько раз в неё уложится радиус $R$? Ровно $2\pi \approx 6{,}28$ раз. Значит, в полном обороте $2\pi$ радиан. А раз полный оборот — это ещё и $360°$, получаем главное соотношение всего урока:
$$2\pi \text{ рад} = 360° \quad \Longleftrightarrow \quad \pi \text{ рад} = 180°$$Из этой единственной строчки выводится вообще всё остальное. Если запомнишь только её — не пропадёшь.
Определение: Один радиан — это центральный угол окружности, длина дуги которого равна радиусу этой окружности. В общем виде: если центральный угол вырезает дугу длины $s$ на окружности радиуса $R$, то величина угла в радианах равна $\alpha = \dfrac{s}{R}$.
Обозначения и соглашения:
- $\alpha$ (или $\varphi$, $\theta$) — величина угла в радианах
- $s$ — длина дуги, которую вырезает угол
- $R$ — радиус окружности
- Обозначение «рад» обычно опускают: запись $\alpha = 2$ означает «два радиана», а запись $\alpha = 2°$ — «два градуса». Если единица не указана — по умолчанию всегда радианы
- Радиан безразмерен: $[\alpha] = \dfrac{\text{м}}{\text{м}} = 1$. Отсюда, например, угловая скорость измеряется в $\text{с}^{-1}$, хотя пишут «рад/с»
📌 Важнейший момент: величина угла в радианах не зависит от радиуса. Возьми стол побольше — и дуга, и радиус вырастут в одинаковое число раз, а их отношение останется прежним. Угол в $1$ радиан на монете и угол в $1$ радиан на орбите Земли — это один и тот же угол.
Примеры с разбором
Пример 1 (простой): на окружности радиуса $4$ см центральный угол вырезает дугу длиной $4$ см. Чему равен угол в радианах?
Решение:
Шаг 1. Запишем определение: $\alpha = \dfrac{s}{R}$.
Шаг 2. Подставим значения: $\alpha = \dfrac{4 \text{ см}}{4 \text{ см}} = 1$.
Шаг 3. Сантиметры сократились — результат безразмерный, как и должно быть.
Ответ: $\alpha = 1$ радиан.
Пример 2 (средний): чему равен развёрнутый угол (половина полного оборота) в радианах?
Решение:
Шаг 1. Развёрнутый угол вырезает ровно половину окружности. Длина всей окружности — $2\pi R$, значит длина половины:
$$s = \frac{2\pi R}{2} = \pi R$$Шаг 2. Применим определение:
$$\alpha = \frac{s}{R} = \frac{\pi R}{R} = \pi$$Шаг 3. Проверим наш ответ по соотношению $\pi$ рад $= 180°$ — развёрнутый угол действительно равен $180°$ ✅
Ответ: $\alpha = \pi \approx 3{,}14$ радиан.
Пример 3 (сложный): какую долю окружности «занимает» угол в 1 радиан? И какой длины дугу вырежет угол в 1 радиан на экваторе Земли ($R \approx 6378$ км)?
Решение:
Шаг 1. Полный оборот — это $2\pi$ радиан. Значит доля от полного оборота:
$$\frac{1}{2\pi} = \frac{1}{6{,}28318\ldots} \approx 0{,}15915$$То есть примерно $15{,}9\%$ окружности — чуть меньше одной шестой.
Шаг 2. Переведём в градусы, чтобы прочувствовать величину:
$$1 \text{ рад} = \frac{180°}{\pi} \approx 57{,}2958°$$Это меньше прямого угла и чуть меньше $60°$ — угла равностороннего треугольника.
Шаг 3. Длина дуги при $\alpha = 1$: по определению $\alpha = s/R$, откуда $s = R\alpha = R \cdot 1 = R$.
$$s = 6378 \text{ км}$$Ответ: угол в 1 радиан — это $\approx 15{,}9\%$ окружности, или $\approx 57{,}3°$; на экваторе он вырезает дугу длиной ровно в один радиус Земли, то есть $6378$ км.
Вывод: запомни картинку — угол в 1 радиан «вытягивает» дугу ровно в один радиус. Это не мнемоника, это буквально определение, и она позволяет прикидывать в уме: угол $0{,}5$ рад даст дугу в половину радиуса, угол $3$ рад — дугу в три радиуса (это уже почти половина окружности, ведь $\pi \approx 3{,}14$).
Почему это важно
Определение $\alpha = s/R$ — это не формальность, а рабочий инструмент. В астрономии всю жизнь измеряют размеры объектов через углы: Луна видна с Земли под углом примерно $0{,}52°$, и, зная расстояние до неё, можно за одну строчку посчитать её диаметр. В компьютерном зрении угловой размер объекта в кадре напрямую связан с фокусным расстоянием камеры именно через эту формулу — так по видимому размеру человека на изображении оценивают расстояние до него. В робототехнике энкодер на моторе отдаёт угол поворота в радианах, и умножение на радиус колеса мгновенно даёт пройденный путь — без единого переводного коэффициента. Везде, где «угол» встречается с «расстоянием», связывает их именно радианная мера.
Перевод градусов в радианы и обратно
Интуиция
Представь, что у тебя два способа мерить расстояние — километры и мили. Чтобы перевести, ты домножаешь на коэффициент. С углами ровно то же самое, и коэффициент выводится из единственного факта $\pi$ рад $= 180°$.
Разберём по шагам логику, чтобы не заучивать две формулы вслепую. Если $180°$ — это то же самое, что $\pi$ радиан, то один градус — это $\dfrac{\pi}{180}$ радиан (просто поделили обе части на 180). А один радиан — это $\dfrac{180°}{\pi}$ градусов (поделили обе части на $\pi$). Дальше — линейность: чтобы узнать, сколько радиан в $n$ градусах, умножаем $n$ на «цену одного градуса».
Определение (правила перевода):
$$\alpha_{\text{рад}} = \alpha_{\text{град}} \cdot \frac{\pi}{180}, \qquad \alpha_{\text{град}} = \alpha_{\text{рад}} \cdot \frac{180}{\pi}$$
Как не перепутать направление. Смотри на множитель как на дробь с единицами: «$\pi$ рад на 180 град». Когда ты умножаешь градусы на $\dfrac{\pi\ \text{рад}}{180°}$, градусы сокращаются и остаются радианы. Когда умножаешь радианы на $\dfrac{180°}{\pi\ \text{рад}}$ — сокращаются радианы. Это тот же приём, что физики называют «проверкой размерности», и он не даёт ошибиться никогда.
Таблица опорных значений — её стоит держать в голове целиком, она окупится на всём курсе тригонометрии:
| Градусы | $0°$ | $30°$ | $45°$ | $60°$ | $90°$ | $120°$ | $135°$ | $150°$ | $180°$ | $270°$ | $360°$ |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Радианы | $0$ | $\dfrac{\pi}{6}$ | $\dfrac{\pi}{4}$ | $\dfrac{\pi}{3}$ | $\dfrac{\pi}{2}$ | $\dfrac{2\pi}{3}$ | $\dfrac{3\pi}{4}$ | $\dfrac{5\pi}{6}$ | $\pi$ | $\dfrac{3\pi}{2}$ | $2\pi$ |
📌 Хитрость для запоминания первой половины таблицы: для угла-делителя развёрнутого ($30° = 180°/6$, $45° = 180°/4$, $60° = 180°/3$, $90° = 180°/2$) знаменатель в радианах — ровно тот же делитель. $180/6 \to \pi/6$. Просто заменяешь «180» на «$\pi$».
Примеры с разбором
Пример 1 (простой): переведи $45°$ в радианы.
Решение:
Шаг 1. Умножаем на $\dfrac{\pi}{180}$:
$$45° \cdot \frac{\pi}{180} = \frac{45\pi}{180}$$Шаг 2. Сокращаем дробь на $45$:
$$\frac{45\pi}{180} = \frac{\pi}{4}$$Проверим наш ответ: $\dfrac{\pi}{4} \approx \dfrac{3{,}1416}{4} \approx 0{,}785$ рад. Обратно: $0{,}785 \cdot 57{,}3 \approx 45°$ ✅
Ответ: $45° = \dfrac{\pi}{4} \approx 0{,}785$ рад.
Пример 2 (средний): переведи $\dfrac{7\pi}{6}$ радиан в градусы.
Решение:
Шаг 1. Умножаем на $\dfrac{180}{\pi}$:
$$\frac{7\pi}{6} \cdot \frac{180}{\pi} = \frac{7\pi \cdot 180}{6\pi}$$Шаг 2. Сокращаем $\pi$ в числителе и знаменателе — это ключевой момент, символ $\pi$ уходит полностью:
$$= \frac{7 \cdot 180}{6} = 7 \cdot 30 = 210$$Ответ: $\dfrac{7\pi}{6} = 210°$.
📌 Практический приём: при переводе из радианов вида $\dfrac{k\pi}{n}$ в градусы просто считай $\dfrac{k \cdot 180}{n}$ — то есть мысленно замени $\pi$ на 180. $\dfrac{7\pi}{6} \to \dfrac{7 \cdot 180}{6} = 210°$. Одно действие вместо трёх.
Пример 3 (сложный): вырази 1 радиан в градусах, минутах и секундах.
Решение:
Шаг 1. Основная часть:
$$1 \text{ рад} = \frac{180}{\pi} = \frac{180}{3{,}14159265\ldots} = 57{,}2957795\ldots°$$Целая часть — $57$ градусов.
Шаг 2. Дробную часть переводим в минуты (в градусе $60$ минут):
$$0{,}2957795 \cdot 60 = 17{,}74677\ldots'$$Целая часть — $17$ минут.
Шаг 3. Остаток переводим в секунды (в минуте $60$ секунд):
$$0{,}74677 \cdot 60 = 44{,}81\ldots'' \approx 45''$$Ответ: $1 \text{ рад} \approx 57°17'45''$, или для прикидок в уме $\approx 57{,}3°$.
Наблюдение: обрати внимание, насколько «некрасивое» это число. И это не недостаток радиана, а его признак честности: радиан не подгоняли под удобство счёта, он получен из природы окружности. «Красивыми» в радианной мере становятся как раз важные углы — прямой угол ровно $\pi/2$, развёрнутый ровно $\pi$, полный оборот ровно $2\pi$.
Почему это важно
Перевод — та самая точка, где чаще всего ломаются реальные программы, причём молча. Функции np.sin, np.cos, math.atan2, torch.sin принимают радианы. Если ты подсунул им градусы, никакого исключения не будет: $30$ — совершенно легальное число радиан (примерно $1719°$, то есть почти пять оборотов), и синус от него честно посчитается как $-0{,}988$. Модель обучится, метрики будут странными, а причину ты будешь искать в архитектуре. Поэтому в коде железное правило: любой угол, пришедший «снаружи» — от пользователя, из GPS-координат, из разметки, из конфига — конвертируй немедленно на границе через np.deg2rad, а наружу отдавай через np.rad2deg. Внутри вычислительного ядра градусов быть не должно вообще.
Длина дуги и площадь сектора: главный бонус радианов
Интуиция
Представь, что ты режешь пиццу. Отрезал кусок — у него есть корочка (это дуга) и площадь (это сектор). Вопрос: как быстро посчитать длину корочки и площадь куска, зная угол?
В градусах это делается через пропорцию и выглядит громоздко: «полная окружность $2\pi R$ соответствует $360°$, значит дуге в $n$ градусов соответствует $\dfrac{2\pi R n}{360}$». Три этажа дроби, легко ошибиться.
А в радианах формула уже готова — она буквально записана в определении. Если $\alpha = \dfrac{s}{R}$, то, домножив обе части на $R$, получаем $s = R\alpha$. Всё. Никаких $360$, никаких $\pi$ в формуле — они уже «зашиты» в само число $\alpha$.
Разберём по шагам площадь. Полный круг площадью $\pi R^2$ соответствует углу $2\pi$. Сектор занимает долю $\dfrac{\alpha}{2\pi}$ от полного круга, значит:
$$S = \pi R^2 \cdot \frac{\alpha}{2\pi} = \frac{R^2 \alpha}{2}$$Опять чисто и коротко.
Определение: Для центрального угла величиной $\alpha$ радиан на окружности радиуса $R$:
$$s = R\alpha \quad \text{(длина дуги)}, \qquad S = \frac{1}{2}R^2\alpha \quad \text{(площадь сектора)}$$Обе формулы справедливы только при $\alpha$, выраженном в радианах.
Есть и третья, очень удобная форма — она связывает дугу с площадью напрямую:
$$S = \frac{1}{2} R^2 \alpha = \frac{1}{2} R \cdot (R\alpha) = \frac{1}{2} s R$$То есть площадь сектора равна половине произведения дуги на радиус — прямая аналогия с площадью треугольника $\tfrac{1}{2} \cdot \text{основание} \cdot \text{высота}$. Сектор и правда можно представить как «треугольник с изогнутым основанием».
⚠️ Ловушка: если подставить в $s = R\alpha$ угол в градусах, получится бессмыслица. Для угла $90°$ на окружности радиуса 2 «формула» дала бы $s = 2 \cdot 90 = 180$, хотя вся окружность имеет длину $4\pi \approx 12{,}6$. Всегда сначала перевод, потом формула.
Примеры с разбором
Пример 1 (простой): найди длину дуги, если $R = 10$ см, а центральный угол $\alpha = \dfrac{\pi}{6}$.
Решение:
Шаг 1. Угол уже в радианах — можно подставлять сразу.
Шаг 2. Применяем $s = R\alpha$:
$$s = 10 \cdot \frac{\pi}{6} = \frac{10\pi}{6} = \frac{5\pi}{3}$$Шаг 3. Численно: $\dfrac{5 \cdot 3{,}1416}{3} \approx 5{,}24$ см.
Проверим наш ответ: $\pi/6 = 30°$ — это $\tfrac{1}{12}$ полного оборота. Вся окружность: $2\pi \cdot 10 \approx 62{,}8$ см. Двенадцатая часть: $62{,}8/12 \approx 5{,}24$ см ✅
Ответ: $s = \dfrac{5\pi}{3} \approx 5{,}24$ см.
Пример 2 (средний): дорога делает поворот по дуге радиусом $200$ м на угол $30°$. Какой длины участок дороги на повороте?
Решение:
Шаг 1. Угол дан в градусах — переводим в радианы:
$$30° = 30 \cdot \frac{\pi}{180} = \frac{\pi}{6} \approx 0{,}5236$$Шаг 2. Считаем длину дуги:
$$s = R\alpha = 200 \cdot \frac{\pi}{6} = \frac{200\pi}{6} = \frac{100\pi}{3}$$Шаг 3. Численно:
$$s \approx \frac{100 \cdot 3{,}14159}{3} \approx 104{,}72 \text{ м}$$Ответ: $s = \dfrac{100\pi}{3} \approx 104{,}7$ м.
📌 Прикидка для здравого смысла: если бы поворот шёл по прямой хорде, участок был бы чуть короче — около $103{,}5$ м. Дуга всегда длиннее хорды, и на малых углах разница крошечная. Это, кстати, и есть геометрический смысл приближения $\sin \alpha \approx \alpha$, к которому мы вернёмся ниже.
Пример 3 (сложный): площадь сектора равна $54$ см², а его радиус $6$ см. Найди угол сектора в радианах и в градусах, а также длину дуги.
Решение:
Шаг 1. Берём формулу площади сектора и выражаем из неё угол:
$$S = \frac{1}{2}R^2\alpha \quad \Longrightarrow \quad \alpha = \frac{2S}{R^2}$$Шаг 2. Подставляем числа:
$$\alpha = \frac{2 \cdot 54}{6^2} = \frac{108}{36} = 3$$Шаг 3. Переводим в градусы:
$$3 \text{ рад} = 3 \cdot \frac{180}{\pi} \approx 3 \cdot 57{,}2958 \approx 171{,}9°$$Шаг 4. Находим длину дуги:
$$s = R\alpha = 6 \cdot 3 = 18 \text{ см}$$Проверим наш ответ через третью форму формулы: $S = \tfrac{1}{2} s R = \tfrac{1}{2} \cdot 18 \cdot 6 = 54$ см² ✅ Сходится.
Ответ: $\alpha = 3$ рад $\approx 171{,}9°$, длина дуги $s = 18$ см.
Наблюдение: угол в 3 радиана — это почти развёрнутый угол, ведь $\pi \approx 3{,}14$. Хорошая точка отсчёта для оценок в уме: «3 радиана — почти прямая линия».
Почему это важно
Формула $s = R\alpha$ — рабочая лошадка везде, где что-то катится или поворачивает. В одометрии робота: энкодер намерил, что колесо повернулось на $\alpha$ радиан, радиус колеса $R$ — пройденный путь равен $R\alpha$, и это одна операция умножения на каждом такте цикла управления. В геодезии и картографии: одна угловая минута по меридиану — это ровно одна морская миля (1852 м), и получается это из той же формулы. В обработке географических данных, когда ты считаешь расстояние между двумя точками по координатам (формула гаверсинуса), внутри стоит $s = R \cdot \Delta\sigma$, где $\Delta\sigma$ — центральный угол в радианах, а $R$ — радиус Земли. И в компьютерной графике: длина дуги нужна, чтобы равномерно распределить точки по окружности при построении меша или при сэмплировании направлений для трассировки лучей.
Углы поворота: отрицательные, большие и приведение к одному кругу
Интуиция
До сих пор мы говорили об углах как о статичных фигурах, где угол не бывает больше $360°$. Но в тригонометрии угол — это не фигура, а поворот. Представь стрелку, приколотую в начале координат и изначально направленную вдоль оси $Ox$. Ты можешь крутить её сколько угодно: на четверть оборота, на три с половиной оборота, в обратную сторону. Каждому такому повороту соответствует свой угол — и он может быть каким угодно вещественным числом.
Договорённость о знаке простая и универсальная (она же принята во всех библиотеках и во всей физике):
- против часовой стрелки — угол положительный
- по часовой стрелке — угол отрицательный
Почему именно так? Потому что при движении против часовой стрелки точка $(\cos\alpha, \sin\alpha)$ движется по единичной окружности в сторону возрастания $\alpha$ — от $(1;0)$ вверх, в первую четверть. Это согласуется со стандартной ориентацией координатных осей.
Теперь ключевая идея. Стрелка после поворота на $\dfrac{\pi}{4}$ и после поворота на $\dfrac{\pi}{4} + 2\pi$ (то есть на четверть плюс полный круг) окажется в одном и том же месте. Углы разные — положение одинаковое. Такие углы называют сонаправленными или отличающимися на период.
Определение: Углы $\alpha$ и $\alpha + 2\pi k$, где $k \in \mathbb{Z}$ — любое целое число, задают одно и то же положение подвижного радиуса. Привести угол к основному промежутку $[0; 2\pi)$ — значит найти среди всех таких углов единственный, лежащий в этом промежутке.
Алгоритм приведения угла $\alpha$ к $[0; 2\pi)$:
-
Раздели $\alpha$ на $2\pi$ и возьми целую часть с округлением вниз (в сторону минус бесконечности): $k = \left\lfloor \dfrac{\alpha}{2\pi} \right\rfloor$
-
Вычти: $\alpha_{\text{прив}} = \alpha - 2\pi k$
-
Результат гарантированно попадёт в $[0; 2\pi)$
В коде это одна строка: np.mod(alpha, 2*np.pi) — функция mod в NumPy как раз округляет вниз и корректно работает с отрицательными числами (в отличие от оператора % в некоторых языках, например в C).
Примеры с разбором
Пример 1 (простой): приведи угол $\dfrac{13\pi}{6}$ к промежутку $[0; 2\pi)$.
Решение:
Шаг 1. Сравним с $2\pi$. Запишем $2\pi$ с тем же знаменателем: $2\pi = \dfrac{12\pi}{6}$.
Шаг 2. Наш угол $\dfrac{13\pi}{6}$ больше $\dfrac{12\pi}{6}$, но меньше двух полных оборотов $\dfrac{24\pi}{6}$. Значит вычитаем один полный оборот ($k = 1$):
$$\frac{13\pi}{6} - \frac{12\pi}{6} = \frac{\pi}{6}$$Ответ: $\dfrac{\pi}{6}$ (то есть $30°$).
Пример 2 (средний): приведи угол $-\dfrac{3\pi}{4}$ к промежутку $[0; 2\pi)$.
Решение:
Шаг 1. Угол отрицательный — значит, поворот по часовой стрелке. Чтобы попасть в $[0; 2\pi)$, надо прибавить полный оборот ($k = -1$).
Шаг 2. Приводим к общему знаменателю: $2\pi = \dfrac{8\pi}{4}$.
$$-\frac{3\pi}{4} + \frac{8\pi}{4} = \frac{5\pi}{4}$$Шаг 3. Проверим: $\dfrac{5\pi}{4} \in [0; 2\pi)$, так как $\dfrac{5\pi}{4} = 1{,}25\pi < 2\pi$ ✅
Ответ: $\dfrac{5\pi}{4}$ (то есть $225°$).
📌 Смысловая проверка: $-\dfrac{3\pi}{4} = -135°$ — это поворот на $135°$ по часовой стрелке, третья четверть. И $225°$ — тоже третья четверть. Одно и то же место, два разных «маршрута» ✅
Пример 3 (сложный): переведи угол $1000°$ в радианы и приведи к промежутку $[0; 2\pi)$.
Решение:
Шаг 1. Переводим в радианы:
$$1000° \cdot \frac{\pi}{180} = \frac{1000\pi}{180} = \frac{50\pi}{9}$$(сократили дробь $\dfrac{1000}{180}$ на 20)
Шаг 2. Сколько полных оборотов помещается? Запишем $2\pi = \dfrac{18\pi}{9}$. Делим:
$$\frac{50\pi/9}{18\pi/9} = \frac{50}{18} \approx 2{,}78$$Целая часть — $2$, значит $k = 2$, вычитаем два полных оборота: $2 \cdot 2\pi = 4\pi = \dfrac{36\pi}{9}$.
Шаг 3. Вычитаем:
$$\frac{50\pi}{9} - \frac{36\pi}{9} = \frac{14\pi}{9}$$Проверим наш ответ независимым путём — через градусы: $1000° - 2 \cdot 360° = 1000° - 720° = 280°$. Переведём в радианы: $280 \cdot \dfrac{\pi}{180} = \dfrac{28\pi}{18} = \dfrac{14\pi}{9}$ ✅ Совпало.
Ответ: $1000° = \dfrac{50\pi}{9}$ рад, приведённый угол $\dfrac{14\pi}{9}$ (то есть $280°$).
Почему это важно
Приведение угла — то, что постоянно приходится делать в коде, и то, на чём постоянно спотыкаются. В робототехнике и системах управления есть классическая проблема «разрыва угла»: робот держит курс $359°$, цель — $1°$, наивная разность даёт ошибку $-358°$, и робот разворачивается почти на полный круг вместо крошечной коррекции на $2°$. Лечится приведением разности к промежутку $(-\pi; \pi]$: np.arctan2(np.sin(d), np.cos(d)) — приём, который стоит запомнить целиком. В обработке сигналов та же история называется «разворачивание фазы» (phase unwrapping): фаза, вылезающая из БПФ, всегда приведена к $(-\pi; \pi]$, и чтобы получить непрерывный график, её приходится «разматывать» функцией np.unwrap. А в позиционном кодировании трансформеров приведение происходит само собой: синус и косинус периодичны, поэтому позиции $pos$ и $pos + 2\pi \cdot 10000^{2i/d}$ на данной частоте кодируются одинаково — и именно поэтому в кодировании используют целый набор частот, а не одну.
Почему анализ и весь ML живут в радианах
Интуиция
Представь, что ты пишешь библиотеку и должен решить, в чём принимать углы. Кажется, что это вопрос вкуса. Но давай посмотрим, что происходит с формулами.
Главный факт, из которого растёт всё остальное — это предел:
$$\lim_{x \to 0} \frac{\sin x}{x} = 1 \qquad (x \text{ в радианах})$$Геометрически он означает вот что: у очень маленького угла длина дуги, длина хорды и высота (то есть синус) практически совпадают. Дуга «выпрямляется». И совпадают они ровно — предел равен единице, а не какому-то коэффициенту — только если угол измерен в радианах, потому что радиан по определению и есть дуга, делённая на радиус.
А теперь смотри, что будет в градусах. Тот же предел превращается в
$$\lim_{x \to 0} \frac{\sin(x°)}{x} = \frac{\pi}{180} \approx 0{,}01745$$Из этого мгновенно следует, что производная синуса в градусной мере равна не $\cos$, а $\dfrac{\pi}{180}\cos$. И этот множитель $0{,}01745$ пополз бы дальше: во вторую производную (уже в квадрате), в ряд Тейлора, в каждое правило дифференцирования сложной функции, в каждый шаг обратного распространения ошибки через слой с тригонометрией. Библиотеки типа NumPy и PyTorch не «предпочитают» радианы — они физически не могут работать иначе, потому что внутри у них ряды и полиномиальные приближения, справедливые только в радианной мере.
Определение (три следствия радианной меры):
$$(\sin x)' = \cos x, \qquad \sin x = x - \frac{x^3}{3!} + \frac{x^5}{5!} - \ldots, \qquad \sin x \approx x \text{ при малых } |x|$$Все три равенства верны только когда $x$ измерен в радианах.
Где радианы всплывают в работе с данными:
-
Косинусная близость эмбеддингов. Похожесть двух векторов считают как $\text{sim} = \dfrac{\mathbf{a} \cdot \mathbf{b}}{\|\mathbf{a}\| \|\mathbf{b}\|} = \cos\theta$, где $\theta$ — угол между векторами. Если нужен сам угол,
np.arccos(sim)вернёт его в радианах, от $0$ (векторы сонаправлены) до $\pi$ (противоположны) -
Матрица поворота. Повернуть вектор на плоскости на угол $\theta$ — значит умножить его на матрицу $\begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix}$, и $\theta$ там в радианах
-
RoPE (Rotary Position Embedding). В современных LLM — LLaMA, Qwen, Mistral — позицию токена кодируют буквально поворотом пар координат вектора запроса и ключа на угол, пропорциональный позиции. Радианы в чистом виде
-
Позиционное кодирование трансформера. $PE(pos, 2i) = \sin\!\left(\dfrac{pos}{10000^{2i/d}}\right)$ — аргумент безразмерный, то есть радианы
-
Угловая скорость и физические симуляции. $\omega$ в рад/с, линейная скорость $v = \omega R$ — формула работает только в радианах
-
Активации и признаки. Периодические признаки (час суток, месяц, направление ветра) кодируют парой $(\sin\frac{2\pi t}{T}, \cos\frac{2\pi t}{T})$, чтобы 23:00 и 00:00 оказались рядом, а не на разных концах шкалы
Примеры с разбором
Пример 1 (простой): косинусная близость двух эмбеддингов равна $0{,}5$. Какой угол между векторами?
Решение:
Шаг 1. Косинусная близость — это и есть косинус угла: $\cos\theta = 0{,}5$.
Шаг 2. Ищем угол в промежутке $[0; \pi]$ (стандартный диапазон для угла между векторами). Из таблицы: $\cos\dfrac{\pi}{3} = 0{,}5$.
Шаг 3. Переведём для интуиции: $\dfrac{\pi}{3} = 60°$.
Ответ: $\theta = \dfrac{\pi}{3} \approx 1{,}047$ рад $= 60°$.
Что это значит на практике: $60°$ — довольно большой угол, векторы связаны слабо. Для эмбеддингов близких по смыслу слов косинусная близость обычно $0{,}7$–$0{,}95$, что соответствует углам от $\approx 0{,}32$ до $\approx 0{,}80$ рад ($18°$–$46°$).
Пример 2 (средний): насколько точно приближение $\sin\alpha \approx \alpha$ при $\alpha = 0{,}1$ рад?
Решение:
Шаг 1. Возьмём ряд Тейлора и оставим два члена:
$$\sin\alpha = \alpha - \frac{\alpha^3}{6} + \frac{\alpha^5}{120} - \ldots$$Шаг 2. Подставим $\alpha = 0{,}1$:
$$\sin(0{,}1) \approx 0{,}1 - \frac{0{,}001}{6} = 0{,}1 - 0{,}0001667 = 0{,}0998333$$Следующий член: $\dfrac{0{,}1^5}{120} = \dfrac{10^{-5}}{120} \approx 8 \cdot 10^{-8}$ — практически ноль.
Шаг 3. Абсолютная погрешность приближения $\sin\alpha \approx \alpha$:
$$0{,}1 - 0{,}09983 = 0{,}00017$$Шаг 4. Относительная погрешность:
$$\frac{0{,}00017}{0{,}09983} \approx 0{,}0017 = 0{,}17\%$$Ответ: $\sin(0{,}1) \approx 0{,}09983$; замена синуса самим углом даёт погрешность около $0{,}17\%$.
Вывод: правило большого пальца — при $|\alpha| < 0{,}1$ рад ($< 6°$) можно смело писать $\sin\alpha \approx \tan\alpha \approx \alpha$, ошибка меньше пятой доли процента. Именно на этом стоит вся физика малых колебаний маятника, вся оптика параксиальных лучей и все линейные приближения при выводе устойчивости численных методов.
Пример 3 (сложный): у двух текстов эмбеддинги $\mathbf{a}$ и $\mathbf{b}$ с $\mathbf{a} \cdot \mathbf{b} = 21{,}75$, $\|\mathbf{a}\| = 5$, $\|\mathbf{b}\| = 5$. Найди угол между ними в радианах и в градусах.
Решение:
Шаг 1. Считаем косинусную близость:
$$\cos\theta = \frac{\mathbf{a} \cdot \mathbf{b}}{\|\mathbf{a}\| \|\mathbf{b}\|} = \frac{21{,}75}{5 \cdot 5} = \frac{21{,}75}{25} = 0{,}87$$Шаг 2. Ищем $\theta = \arccos(0{,}87)$. Точного «табличного» значения нет, оценим. Известно, что $\cos\dfrac{\pi}{6} = \cos 30° \approx 0{,}866$ — это очень близко к $0{,}87$, но чуть меньше. Косинус убывает, значит наш угол чуть меньше $30°$.
Шаг 3. Уточним. Возьмём $\sin\theta = \sqrt{1 - 0{,}87^2} = \sqrt{1 - 0{,}7569} = \sqrt{0{,}2431} \approx 0{,}4931$. Численно $\arccos(0{,}87) \approx 0{,}5155$ рад.
Шаг 4. Переводим в градусы:
$$0{,}5155 \cdot \frac{180}{\pi} \approx 0{,}5155 \cdot 57{,}2958 \approx 29{,}54°$$Проверим наш ответ: $29{,}54°$ действительно чуть меньше $30°$, как мы и оценили на шаге 2 ✅
Ответ: $\theta \approx 0{,}5155$ рад $\approx 29{,}5°$.
Практический комментарий: обрати внимание на нелинейность. Близость $1{,}0$ — это угол $0$, близость $0{,}87$ — уже почти $30°$, а близость $0$ — целых $90°$. Косинус около нуля меняется быстро, около единицы — медленно. Поэтому при ранжировании по близости разница между $0{,}98$ и $0{,}99$ куда содержательнее, чем между $0{,}30$ и $0{,}31$: в первом случае угол падает с $11{,}5°$ до $8{,}1°$ (на треть!), во втором — меняется меньше чем на градус.
Почему это важно
Понимание, что «угол — это просто безразмерное число», убирает целый класс ошибок в реальном коде. Ты перестаёшь удивляться, почему np.sin(30) не даёт $0{,}5$; почему матрица поворота, собранная с theta = 45, крутит объект куда-то не туда, но при этом остаётся идеально ортогональной (и потому баг не ловится проверкой $\det R = 1$); почему np.arccos иногда возвращает nan (потому что из-за плавающей точки косинусная близость выходит $1{,}0000000000000002$, а арккосинус вне отрезка $[-1;1]$ не определён — лечится np.clip(sim, -1.0, 1.0)). И ты начинаешь видеть радианы там, где раньше видел магические константы: число $10000$ в позиционном кодировании — это просто параметр, задающий диапазон длин волн от $2\pi$ до $2\pi \cdot 10000$ позиций, чтобы модель могла «читать» и соседние токены, и удалённые на тысячи шагов.
Практика: 30 заданий
Базовые (задания 1-10)
Задание 1: Переведи $60°$ в радианы.
Задание 2: Переведи $210°$ в радианы.
Задание 3: Переведи $\dfrac{3\pi}{4}$ радиан в градусы.
Задание 4: Переведи $\dfrac{5\pi}{3}$ радиан в градусы.
Задание 5: Сколько радиан содержится в полном обороте, в половине оборота и в четверти оборота?
Задание 6: Найди длину дуги, если радиус окружности $R = 5$ см, а центральный угол $\alpha = 0{,}8$ рад.
Задание 7: Дуга длиной $12$ см лежит на окружности радиуса $3$ см. Найди центральный угол в радианах.
Задание 8: Сколько примерно градусов в одном радиане?
Задание 9: Найди площадь сектора с радиусом $R = 6$ см и углом $\alpha = \dfrac{\pi}{3}$.
Задание 10: В Python выполнили np.sin(30) и вместо ожидаемых $0{,}5$ получили $-0{,}988$. Объясни, что произошло, и запиши правильный вызов.
Средние (задания 11-20)
Задание 11: Переведи $137°$ в радианы — точно и приближённо (до четвёртого знака).
Задание 12: Переведи $2{,}5$ радиана в градусы и минуты.
Задание 13: Найди угол в радианах между векторами $\mathbf{a} = (1; 0)$ и $\mathbf{b} = (1; 1)$.
Задание 14: Косинусная близость двух эмбеддингов равна $-0{,}5$. Найди угол между ними в радианах и градусах.
Задание 15: На сколько радиан повернётся минутная стрелка часов за $20$ минут?
Задание 16: Колесо вращается со скоростью $300$ оборотов в минуту. Найди угловую скорость в рад/с.
Задание 17: Чему равна длина дуги земного меридиана, соответствующая углу в $1°$? Радиус Земли принять равным $6371$ км.
Задание 18: В позиционном кодировании трансформера аргумент синуса равен $\dfrac{pos}{10000^{2i/d}}$. При $i = 0$ знаменатель равен $1$, то есть аргумент равен самой позиции. Найди, какому углу из $[0; 2\pi)$ соответствует позиция $pos = 100$.
Задание 19: Найди координаты точки единичной окружности, соответствующей углу поворота $\dfrac{2\pi}{3}$.
Задание 20: Вектор $(3; 4)$ повернули против часовой стрелки на $\dfrac{\pi}{2}$. Найди координаты нового вектора.
Продвинутые (задания 21-30)
Задание 21: Приведи угол $\dfrac{17\pi}{4}$ к промежутку $[0; 2\pi)$.
Задание 22: Приведи угол $-\dfrac{8\pi}{3}$ к промежутку $[0; 2\pi)$.
Задание 23: Площадь сектора равна $50$ см², радиус $10$ см. Найди угол сектора в радианах и длину его дуги.
Задание 24: Периметр кругового сектора равен $20$ см, а его площадь — $16$ см². Найди радиус и угол сектора.
Задание 25: Оцени абсолютную и относительную погрешность приближения $\sin\alpha \approx \alpha$ при $\alpha = 0{,}05$ рад.
Задание 26: Ведущая шестерня радиусом $4$ см вращается со скоростью $120$ оборотов в минуту и сцеплена с ведомой шестернёй радиусом $10$ см. Найди:
- угловую скорость ведущей шестерни в рад/с
- линейную скорость точки в месте зацепления
- угловую скорость ведомой шестерни и число её оборотов в минуту
- угол поворота ведомой за $5$ секунд и его приведённое значение в $[0; 2\pi)$
Задание 27: Даны эмбеддинги $\mathbf{a} = (3; 4)$ и $\mathbf{b} = (4; 3)$. Найди косинусную близость и угол между ними в радианах и градусах.
Задание 28: В позиционном кодировании частота задаётся знаменателем $10000^{2i/d}$. При $d = 512$ и $i = 128$ найди угол для позиции $pos = 1$ и определи, через сколько позиций эта компонента кодирования повторится.
Задание 29: МКС движется по круговой орбите радиусом примерно $6771$ км и совершает полный оборот вокруг Земли за $92$ минуты. Найди угловую скорость станции в рад/с и её линейную скорость.
Задание 30: Отладка кода. Найди ошибку и исправь её.
import numpy as np
theta = 45 # хотим повернуть вектор на 45 градусов
R = np.array([[np.cos(theta), -np.sin(theta)],
[np.sin(theta), np.cos(theta)]])
v = np.array([1.0, 0.0])
print(R @ v) # ожидали примерно [0.707, 0.707], получили [0.525, 0.851]
# при этом проверки "матрица корректна" проходят:
print(np.linalg.det(R)) # 1.0000000000000002
print(R.T @ R) # почти единичная матрица
Частые ошибки
❌ Ошибка 1: подставлять градусы в тригонометрические функции
Неправильно: np.sin(30), math.cos(60), torch.sin(torch.tensor(90.0)) в надежде получить синус тридцати градусов.
Правильно: np.sin(np.deg2rad(30)) или сразу np.sin(np.pi/6). Все функции во всех вычислительных библиотеках принимают радианы.
💡 Почему важно: это самая частая и самая коварная ошибка в реальном коде, потому что она не вызывает исключения. Число $30$ — совершенно легальный угол в радианах, синус от него честно посчитается ($\approx -0{,}988$), программа отработает, модель обучится, и ты будешь искать причину плохих метрик где угодно, только не здесь.
❌ Ошибка 2: перепутать направление перевода
Неправильно: переводить $60°$ в радианы как $60 \cdot \dfrac{180}{\pi} \approx 3438$.
Правильно: $60 \cdot \dfrac{\pi}{180} = \dfrac{\pi}{3} \approx 1{,}047$.
💡 Почему важно: ошибка сразу видна по абсурдности результата (угол в $3438$ радиан — это $547$ полных оборотов), но в коде такой мусор молча поедет дальше. Спасает мысленная проверка размерности: множитель $\dfrac{\pi\ \text{рад}}{180°}$ сокращает градусы и оставляет радианы — значит, именно он и нужен для перевода в радианы.
❌ Ошибка 3: «заменить $\pi$ на 180» и при этом оставить $\pi$ в ответе
Неправильно: $\dfrac{3\pi}{4} = \dfrac{3 \cdot 180}{4}\pi = 135\pi$ градусов.
Правильно: $\dfrac{3\pi}{4} = \dfrac{3 \cdot 180}{4} = 135°$. Символ $\pi$ при переводе исчезает полностью, потому что он сокращается с $\pi$ в знаменателе множителя $\dfrac{180}{\pi}$.
💡 Почему важно: приём «мысленно замени $\pi$ на 180» — отличный ускоритель, но он именно заменяет, а не добавляет. Держи в голове полную запись $\dfrac{3\pi}{4} \cdot \dfrac{180}{\pi}$ — тогда сокращение $\pi$ будет очевидным шагом, а не магией.
❌ Ошибка 4: применять $s = R\alpha$ и $S = \tfrac{1}{2}R^2\alpha$ к углу в градусах
Неправильно: для $R = 2$ и угла $90°$ писать $s = 2 \cdot 90 = 180$.
Правильно: сначала перевести: $90° = \dfrac{\pi}{2}$, потом $s = 2 \cdot \dfrac{\pi}{2} = \pi \approx 3{,}14$.
💡 Почему важно: результат $180$ больше длины всей окружности ($4\pi \approx 12{,}6$) в четырнадцать раз — полная бессмыслица. Обе формулы выведены прямо из определения $\alpha = s/R$, то есть из радианной меры, и в градусах просто не имеют смысла. Полезная привычка: увидел в задаче $s = R\alpha$ — первым делом посмотри, в чём измерен $\alpha$.
❌ Ошибка 5: считать косинусную близость «процентом похожести», линейно связанным с углом
Неправильно: думать, что близость $0{,}5$ — это «половина сходства», то есть половина от $90°$, а именно $45°$.
Правильно: $\arccos(0{,}5) = \dfrac{\pi}{3} = 60°$, а не $45°$. Связь между близостью и углом — арккосинус, и она сильно нелинейна: вблизи $\cos\theta = 1$ маленькое изменение близости даёт большое изменение угла, а вблизи нуля — наоборот.
💡 Почему важно: от этого зависят пороги отсечения в поиске по эмбеддингам. Разница между близостью $0{,}98$ и $0{,}99$ — это угол $11{,}5°$ против $8{,}1°$, то есть падение почти на треть. А разница между $0{,}30$ и $0{,}31$ — меньше градуса. Если ты подбираешь порог «на глаз», как будто близость линейна, ты систематически ошибёшься в самой важной зоне — там, где документы почти совпадают.
❌ Ошибка 6: np.arccos возвращает nan из-за чисел с плавающей точкой
Неправильно: theta = np.arccos(a @ b / (np.linalg.norm(a) * np.linalg.norm(b))) — и иногда получать nan.
Правильно: theta = np.arccos(np.clip(cos_sim, -1.0, 1.0)).
💡 Почему важно: арккосинус определён только на отрезке $[-1; 1]$. Математически косинусная близость никогда из него не выходит, но при вычислении в float64 результат может оказаться $1{,}0000000000000002$ — например, когда векторы почти или полностью совпадают. Арккосинус от такого числа даёт nan, который затем расползается по всему массиву и по градиентам. np.clip — одна строчка, которая закрывает проблему навсегда.
❌ Ошибка 7: наивно вычитать углы, забыв про периодичность
Неправильно: курс робота $\alpha_1 = 6{,}20$ рад, цель $\alpha_2 = 0{,}08$ рад, ошибка $= 0{,}08 - 6{,}20 = -6{,}12$ рад — робот разворачивается почти на полный круг.
Правильно: привести разность к промежутку $(-\pi; \pi]$: $-6{,}12 + 2\pi = 0{,}163$ рад. Реальная коррекция — меньше десяти градусов.
💡 Почему важно: это классическая «проблема разрыва» в системах управления, навигации и обработке сигналов. Универсальный приём на все случаи: d = np.arctan2(np.sin(a2 - a1), np.cos(a2 - a1)) — функция arctan2 сама возвращает результат в $(-\pi; \pi]$, и никакие ручные проверки знака больше не нужны.
Главное запомнить
✅ Один радиан — центральный угол, у которого длина дуги равна радиусу. Формально: $\alpha = \dfrac{s}{R}$. Величина угла в радианах не зависит от радиуса окружности.
✅ Главное соотношение всего урока: $\pi$ рад $= 180°$, то есть $2\pi$ рад $= 360°$. Из него выводится всё остальное.
✅ Переводы: градусы $\to$ радианы: умножь на $\dfrac{\pi}{180}$. Радианы $\to$ градусы: умножь на $\dfrac{180}{\pi}$. Для дробей вида $\dfrac{k\pi}{n}$ просто мысленно замени $\pi$ на $180$.
✅ Опорные значения: $30° = \dfrac{\pi}{6}$, $45° = \dfrac{\pi}{4}$, $60° = \dfrac{\pi}{3}$, $90° = \dfrac{\pi}{2}$, $180° = \pi$, $270° = \dfrac{3\pi}{2}$, $360° = 2\pi$. И ориентир: $1$ рад $\approx 57{,}3°$.
✅ Длина дуги $s = R\alpha$ и площадь сектора $S = \dfrac{1}{2}R^2\alpha = \dfrac{1}{2}sR$ — обе формулы верны только при $\alpha$ в радианах.
✅ Радиан безразмерен — это отношение длины к длине. Поэтому его можно подставлять в ряды, интегралы и матрицы, а формула $v = \omega R$ даёт метры в секунду без переводных коэффициентов.
✅ Знак угла: против часовой стрелки — положительный, по часовой — отрицательный. Углы $\alpha$ и $\alpha + 2\pi k$ ($k \in \mathbb{Z}$) задают одно и то же положение.
✅ Приведение к $[0; 2\pi)$: вычти $2\pi k$, где $k = \left\lfloor \dfrac{\alpha}{2\pi} \right\rfloor$. В коде — np.mod(alpha, 2*np.pi).
✅ Почему анализ живёт в радианах: только в них $\lim\limits_{x \to 0}\dfrac{\sin x}{x} = 1$, $(\sin x)' = \cos x$ и $\sin x = x - \dfrac{x^3}{6} + \ldots$. В градусах каждая формула обрастает множителем $\dfrac{\pi}{180} \approx 0{,}01745$.
✅ Малые углы: при $|\alpha| < 0{,}1$ рад можно писать $\sin\alpha \approx \tan\alpha \approx \alpha$ с ошибкой меньше $0{,}2\%$. Относительная погрешность растёт примерно как $\dfrac{\alpha^2}{6}$.
✅ В коде: np.sin, np.cos, np.arccos, torch.sin — всё в радианах, всегда. Конвертируй на границе через np.deg2rad / np.rad2deg и не держи градусы внутри вычислений.
Связь с другими темами курса
Что было раньше: построение графиков функций (урок 90) и вся линия «функция — область определения — график» из уроков 76–89. Оттуда нужна привычка думать о числовой оси и о том, что аргумент функции — просто число. Радианная мера как раз и превращает угол в обычное число на оси, после чего $\sin$ и $\cos$ становятся функциями в том же смысле, что и $x^2$ или $\sqrt{x}$.
Что дальше: следующий урок — единичная окружность (урок 92). Там мы возьмём радианный угол и сопоставим ему точку окружности радиуса $1$, а координаты этой точки и окажутся косинусом и синусом. Радианы — это система координат на окружности, единичная окружность — сама окружность; без первого второе просто не на чем строить. Дальше по курсу: определения синуса и косинуса, их свойства и графики, тригонометрические уравнения и неравенства (уроки 103–107), где ответы вида $x = \dfrac{\pi}{6} + 2\pi k$ пишутся исключительно в радианах, и, наконец, производные тригонометрических функций (урок 138), где формула $(\sin x)' = \cos x$ работает — снова только в радианной мере.
Где это применяется в жизни, в ML и в данных:
🤖 В машинном обучении: косинусная близость эмбеддингов и её перевод в угол через arccos; матрицы поворота в аугментации изображений; RoPE (rotary position embedding) в LLaMA, Qwen и Mistral, где позиция токена кодируется буквально поворотом пар координат; синусоидальное позиционное кодирование в классическом трансформере.
📊 В data science: циклическое кодирование признаков — час суток, день недели, месяц, направление ветра превращают в пару $\left(\sin\dfrac{2\pi t}{T}; \cos\dfrac{2\pi t}{T}\right)$, чтобы модель понимала, что $23{:}00$ и $00{:}00$ — соседи; фаза в спектральном анализе временных рядов после БПФ приходит в радианах в промежутке $(-\pi; \pi]$.
💻 В программировании и графике: любые повороты спрайтов, камер и объектов; интерполяция ориентаций кватернионами; atan2 для вычисления направления от точки к точке.
🔬 В физике и инженерии: угловая скорость $\omega$ и связь $v = \omega R$; гармонические колебания $x(t) = A\sin(\omega t + \varphi)$, где и $\omega t$, и фаза $\varphi$ — в радианах; малоугловое приближение в оптике и в теории колебаний.
🌍 В геодезии и навигации: формула гаверсинуса для расстояния между координатами (внутри — $s = R \Delta\sigma$ с центральным углом в радианах); угловые размеры объектов в астрономии; определение расстояний методом параллакса.
Интересные факты
💡 Слово «радиан» младше самой идеи почти на 160 лет. Концепцию описал Роджер Котс около 1714 года, а термин впервые появился в печати только в 1873-м — в экзаменационном листке Джеймса Томсона, профессора из Белфаста и старшего брата лорда Кельвина. До этого мера была, а названия у неё не было: писали громоздкое «круговая мера» или «угол, измеренный дугой единичного радиуса».
💡 Радиан не совсем полноправная единица СИ. До 1995 года радиан и стерадиан числились в отдельной категории «дополнительных единиц». Потом их официально признали производными безразмерными единицами — то есть «рад» технически равен единице и его можно писать или не писать по вкусу. Именно поэтому в записи $\alpha = 2$ единицы нет, а в $\alpha = 2°$ значок градуса обязателен: без него угол по умолчанию считается радианным.
💡 Существует ещё и град (гон) — третья мера угла. Французы во время метрической реформы предложили делить прямой угол на $100$ частей, чтобы полный оборот равнялся $400$ градам. Идея почти умерла, но выжила в геодезии и до сих пор живёт кнопкой GRAD на инженерных калькуляторах — рядом с DEG и RAD. Если твой калькулятор внезапно выдаёт странные синусы, первым делом проверь именно этот переключатель.
💡 Диаметр Луны из одного умножения. Луна видна с Земли под углом примерно $0{,}52°$, то есть $0{,}52 \cdot \dfrac{\pi}{180} \approx 0{,}00908$ рад. Расстояние до неё — $384\,400$ км. По формуле $s = R\alpha$ получаем $384400 \cdot 0{,}00908 \approx 3490$ км. Настоящий диаметр Луны — $3474$ км. Погрешность меньше половины процента, и это при том, что вся «астрономия» здесь — одно умножение. Тот же приём (малоугловое приближение) астрономы применяют к звёздам, галактикам и к измерению расстояний методом параллакса.
💡 Число $10000$ в трансформерах — это про длины волн. В формуле позиционного кодирования знаменатель $10000^{2i/d}$ пробегает значения от $1$ до $10000$, а значит длины волн синусоид — от $2\pi \approx 6{,}3$ до $2\pi \cdot 10000 \approx 62\,832$ позиций. Авторы выбрали это число так, чтобы модель могла различать и соседние токены, и позиции, разнесённые на десятки тысяч шагов. По сути это «двоичные часы» из синусов, размеченные в радианах.
Лайфхаки и полезные трюки
1. Держи в голове ровно один якорь: $\pi = 180°$
Из него выводится абсолютно всё, включая обе формулы перевода. Не запоминай два множителя как отдельные факты — вспомни якорь и подели обе части на то, что нужно. $\pi = 180$ $\Rightarrow$ $1° = \pi/180$ и $1\ \text{рад} = 180/\pi$.
2. Перевод «$k\pi/n$ в градусы» — мысленная замена $\pi \to 180$
$\dfrac{5\pi}{6} \to \dfrac{5 \cdot 180}{6} = 150°$. $\dfrac{7\pi}{4} \to \dfrac{7 \cdot 180}{4} = 315°$. Одно действие вместо трёх, и никакого калькулятора. Работает всегда, потому что $\pi$ в множителе $\dfrac{180}{\pi}$ гарантированно сократится.
3. Обратный приём: $n° \to$ радианы через «на сколько частей делит 180»
Спроси себя: сколько раз данный угол укладывается в $180$? $30$ укладывается $6$ раз $\Rightarrow$ $\dfrac{\pi}{6}$. $45$ — четыре раза $\Rightarrow$ $\dfrac{\pi}{4}$. $36$ — пять раз $\Rightarrow$ $\dfrac{\pi}{5}$. Для «некрасивых» углов работает общее правило: запиши $\dfrac{n}{180}$ и сократи, потом припиши $\pi$. Например, $150° \to \dfrac{150}{180} = \dfrac{5}{6} \to \dfrac{5\pi}{6}$.
4. Три числовых ориентира для прикидки в уме
$1$ рад $\approx 57°$ (чуть меньше угла равностороннего треугольника). $3$ рад $\approx 172°$ — почти развёрнутый угол. $6$ рад $\approx 344°$ — почти полный оборот. С этими тремя реперами ты за секунду оцениваешь любое радианное значение: «$4{,}5$ рад — это между развёрнутым и полным, где-то в третьей четверти».
5. Приведение угла — одна строка, а не цепочка условий
Вместо ручных if angle > 2*pi: angle -= 2*pi (которые ломаются на углах вроде $100$ рад) пиши np.mod(alpha, 2*np.pi) для промежутка $[0; 2\pi)$ или np.arctan2(np.sin(alpha), np.cos(alpha)) для промежутка $(-\pi; \pi]$. Второй вариант особенно хорош для разностей углов — он сам решает проблему «разрыва» на границе круга.
6. Малые углы: линеаризуй смело, но знай границу
При $|\alpha| < 0{,}1$ рад ($\approx 6°$) смело пиши $\sin\alpha \approx \tan\alpha \approx \alpha$ и $\cos\alpha \approx 1 - \dfrac{\alpha^2}{2}$. Относительная ошибка синуса — примерно $\dfrac{\alpha^2}{6}$: при $0{,}1$ рад это $0{,}17\%$, при $0{,}3$ рад уже $1{,}5\%$, при $0{,}5$ рад — около $4\%$. Одна формула $\dfrac{\alpha^2}{6}$ мгновенно отвечает на вопрос «можно ли здесь линеаризовать».
7. В коде — единицы прямо в именах переменных
angle_deg и angle_rad вместо безликого angle. Тогда строка np.cos(angle_deg) режет глаз при чтении, и баг ловится на код-ревью, а не на продакшене через две недели. Правило границы: снаружи можно всё что угодно, внутри вычислительного ядра — только радианы, конвертация ровно в двух местах (на входе и на выходе).
8. Проверяй повороты смыслом, а не структурой
Матрица поворота остаётся ортогональной с определителем $1$ при любом угле, поэтому проверки $\det R = 1$ и $R^T R = I$ не поймают перепутанные градусы. Работающий тест — прогнать через матрицу известный вектор: поворот $(1;0)$ на $\dfrac{\pi}{2}$ обязан дать $(0;1)$. Один ассерт закрывает целый класс ошибок.
Радианная мера — это тот редкий случай, когда «неудобное» на первый взгляд определение оказывается единственно правильным. Да, $57{,}3°$ выглядит куда менее дружелюбно, чем круглые $90°$ или $180°$. Но именно радианы превращают угол в обычное безразмерное число, которое можно дифференцировать, раскладывать в ряд, класть в матрицу и скармливать GPU без единого переводного коэффициента. Как только ты перестанешь мысленно переводить каждый радиан в градусы и начнёшь думать сразу в $\pi$-долях — $\dfrac{\pi}{6}$ это «тридцатка», $\dfrac{\pi}{2}$ это «прямой», $\pi$ это «развёрнутый», — вся тригонометрия станет заметно легче, а код с np.sin перестанет преподносить сюрпризы.
А теперь попробуй сам: возьми любой свой скрипт, где есть углы, и проверь, что внутри вычислений живут только радианы. Дальше нас ждёт единичная окружность — мы возьмём эту самую радианную шкалу, намотаем её на окружность радиуса $1$ и увидим, как из координат точки рождаются синус и косинус. Всё, что ты сейчас разобрал, станет там системой координат. 🚀
Понял тему? Закрепи в боте! 🚀
Попрактикуйся на задачах и получи персональные рекомендации от AI
💪 Начать тренировку