Перейти к содержимому

Дополнительно · 5

Радианы

В уроке «Вращение» и в уроке «Синус и косинус» мы уже пользовались радианами, не объясняя толком, что это такое — просто “не градусы”. Разберёмся, что стоит за этим словом.

Градусы кажутся привычными, но по сути это такая же условность, как и любая другая: кто-то давно решил делить полный оборот на 360 одинаковых частей, и с тех пор так и считают. Особого смысла в числе 360 нет — с тем же успехом могли бы выбрать 100 или 1000. Радианы менее привычны, зато, в отличие от градусов, у них есть самый настоящий смысл — не выдуманный, а взятый прямо из геометрии.

Возьмём окружность радиусом ровно 1 — единичную окружность, как в уроке «Синус и косинус». Угол, отложенный от центра, вырезает на ней дугу — кусок края окружности между двумя лучами угла. Представь, что эта дуга — кусочек верёвочки. Потяни за её конец, выпрями в прямую линию и измерь линейкой. Вот эта длина и есть угол в радианах.

У окружности радиусом 1 длина всей окружности целиком равна 2π. Число π (читается “пи”) — самое обычное число, такое же, как и любое другое, просто с бесконечной, никогда не обрывающейся записью после запятой — поэтому его и не выписывают цифрами до конца, а обозначают отдельной буквой. Приблизительно π равно 3.14. Значит, полный оборот — это 2π радиан (примерно 6.28), половина оборота (180°) — π радиан (примерно 3.14), четверть оборота (90°) — π/2 (примерно 1.57).

Возьми окружность радиусом больше 1 — та же самая дуга для того же самого угла станет длиннее: длина дуги растёт вместе с радиусом, пропорционально ему. Радиусом 2 — дуга вдвое длиннее, радиусом 3 — втрое. Чтобы получить именно угол, а не длину дуги с примесью радиуса, лишний радиус нужно убрать — точно так же, как в уроке «Направление» убирали лишнюю длину вектора делением на неё же. Разделив длину дуги на радиус окружности, получаем угол в радианах, каким бы ни был радиус:

// Длина дуги, делённая на радиус, — угол в радианах, который эту дугу
// вырезал, какой бы ни была сама окружность.
let radians = arc_length / radius;

Раз половина оборота — это и π радиан, и 180°, перевести одно в другое совсем просто: оба числа означают одно и то же, просто в разных единицах. Чтобы перейти от градусов к радианам, умножаем на π, делённое на 180; чтобы вернуться обратно — умножаем на 180, делённое на π.

Писать эту формулу самому, впрочем, не придётся — в Rust уже готовы методы для этого, как в уроке «Методы»:

let radians = angle_degrees.to_radians();
let degrees = angle_radians.to_degrees();
1.57

На картинке выше — окружность радиусом ровно 1 (можно считать, что это 1 метр, 1 сантиметр, что угодно — главное, что единица). Из точки в центре выходят две толстые серые линии и упираются в саму окружность — между ними получился уголок. Этот уголок отрезает от окружности (она нарисована пунктиром) кусочек её края — вот этот кусочек и называется дугой, мы выделили её красным. Рядом с дугой красным же числом записана её длина. А раз радиус окружности равен 1, эта длина и есть угол в радианах — то есть это одно и то же число.

Меняй angle — дуга на окружности меняется вместе с ним. Нажми “Выпрямить” — окружность покатится по линейке вправо, как колесо, и дуга останется позади неё распрямленной линией той же длины, что и сама дуга. Длина этой линии, если посмотреть на линейку под ней, в точности равна значению в радианах. Нажми “Свернуть”, чтобы окружность вернулась обратно, наматывая дугу на себя.

  • Радиан — длина дуги единичной окружности (радиус ровно 1), которую стягивает угол. Не абстрактная единица вроде градуса, а самая настоящая длина.
  • π — такое же число, как и любое другое, просто с бесконечной записью после запятой, поэтому его обозначают отдельной буквой, а не выписывают цифрами до конца. Приблизительно π равно 3.14.
  • Длина всей единичной окружности — 2π, поэтому полный оборот — это 2π радиан, половина оборота — π, четверть — π/2.
  • arc_length / radius — то же деление, убирающее лишнюю длину, что и в уроке «Направление», только здесь оно избавляет не вектор от лишней длины, а дугу от лишнего радиуса окружности.
  • В демке кнопка “Выпрямить” прокатывает окружность по линейке, как колесо, — дуга остаётся позади распрямленным отрезком той же длины. Эта длина и есть угол в радианах, показанный в поле angle.
  • .to_radians() и .to_degrees() — готовые методы, переводящие угол туда и обратно, без ручной формулы с π.