🔴 Сложный ⏱️ 55 минут

Теорема косинусов

📋 Содержание урока

Теорема косинусов 📐

Теорема Пифагора — это, по сути, частный случай. Она работает только тогда, когда тебе повезло с треугольником: угол ровно 90°. А что делать, если угол 73° или 138°? Что если у тебя вообще нет прямого угла, а есть просто три произвольные стороны или две стороны и угол между ними?

Именно для этого существует теорема косинусов. Это универсальный инструмент: она работает для любого треугольника, а теорема Пифагора оказывается внутри неё как частный случай — как будто ты всегда пользовался урезанной версией куда более мощной формулы.

Есть и вторая причина, по которой этот урок важнее, чем кажется на первый взгляд. Та же самая формула, только переписанная в терминах векторов, — это ровно то, что происходит внутри поисковых систем, рекомендательных сервисов и языковых моделей, когда они сравнивают эмбеддинги. Cosine similarity, о которой ты наверняка слышал в контексте ML, — это теорема косинусов, решённая относительно косинуса угла. Ты не просто выучишь формулу для треугольников — ты поймёшь, откуда на самом деле берётся один из самых используемых инструментов в data science.

Ты узнаешь:

🎯 Как найти третью сторону треугольника по двум сторонам и углу между ними

🎯 Как найти любой угол треугольника, зная только три стороны

🎯 Откуда формула берётся и почему теорема Пифагора — её частный случай

🎯 Почему cosine similarity в ML — это буквально теорема косинусов, решённая относительно $\cos\theta$


История: откуда это взялось? 📜

Формально теорему косинусов сформулировал Евклид ещё в III веке до нашей эры — в «Началах» есть предложения II.12 и II.13, которые доказывают ровно этот факт, только без алгебры и без слова «косинус» (тригонометрии как отдельной науки тогда попросту не существовало). Евклид формулировал всё чисто геометрически, через площади прямоугольников и квадратов, построенных на сторонах. Это работало, но было громоздким: чтобы решить простейшую задачу, приходилось оперировать площадями фигур, а не числами.

Настоящий прорыв случился почти через 1800 лет. Персидский астроном и математик Гияс ад-Дин Джамшид аль-Каши (XV век, Самарканд, обсерватория Улугбека) переформулировал теорему в удобном тригонометрическом виде и активно использовал её в астрономических расчётах — вычислении расстояний между звёздами и планетами по измеренным углам. Вклад аль-Каши был настолько значителен, что во французской математической традиции теорему косинусов до сих пор иногда называют «théorème d'Al-Kashi». Окончательную алгебраическую форму, близкую к современной, придал в XVI веке французский математик Франсуа Виет.

А в XIX-XX веках у теоремы косинусов началась вторая жизнь — она стала рабочим инструментом геодезистов и мореплавателей. Знаменитая Great Trigonometric Survey (Великая тригонометрическая съёмка Индии, 1802-1871) — грандиозный проект по измерению всего Индийского субконтинента методом триангуляции — использовала именно теорему косинусов и теорему синусов вместе, чтобы по цепочке измеренных углов и одной базовой стороне вычислить расстояния до недоступных точек. Именно так, кстати, впервые была измерена высота горы Эверест — без единого спутника, без лазерных дальномеров, только с помощью треугольников и тригонометрии. Сегодня тот же принцип используют алгоритмы трилатерации в GPS: зная расстояния до нескольких спутников и углы между направлениями, приёмник вычисляет своё точное местоположение.


Блок 1: От теоремы Пифагора к теореме косинусов

Что не так с теоремой Пифагора

Давай разберёмся, в чём именно ограничение. Теорема Пифагора $c^2 = a^2 + b^2$ работает только для прямоугольного треугольника — она в принципе не задаёт угол C явно, потому что он всегда подразумевается равным 90°. Стоит углу между сторонами $a$ и $b$ измениться хоть на градус — и формула перестаёт работать. Третья сторона либо становится короче (если угол острее прямого), либо длиннее (если угол тупее).

Представь, что ты держишь в руках две палки фиксированной длины — 5 см и 8 см — и шарнир между ними. Пока угол между палками 90°, расстояние между их свободными концами подчиняется Пифагору. Но стоит начать раскрывать шарнир (увеличивать угол к 180°) — расстояние между концами будет расти. А если наоборот, сводить палки вместе (угол к 0°) — расстояние будет уменьшаться, стремясь к разности длин палок.

Значит, должна существовать формула, которая учитывает угол явно и при угле 90° сама собой превращается в теорему Пифагора. Это и есть теорема косинусов.

Определение

Теорема косинусов: В любом треугольнике квадрат стороны равен сумме квадратов двух других сторон минус удвоенное произведение этих сторон на косинус угла между ними.

$$c^2 = a^2 + b^2 - 2ab\cos C$$

где $a$, $b$, $c$ — стороны треугольника, а $C$ — угол, противолежащий стороне $c$ (то есть угол, зажатый между сторонами $a$ и $b$).

Формулу можно записать для любой из трёх сторон — она симметрична относительно того, какую вершину ты выбрал «главной»:

$$a^2 = b^2 + c^2 - 2bc\cos A$$$$b^2 = a^2 + c^2 - 2ac\cos B$$$$c^2 = a^2 + b^2 - 2ab\cos C$$

Смотри, что происходит при $C = 90°$: $\cos 90° = 0$, и весь последний член обнуляется. Формула схлопывается ровно в теорему Пифагора:

$$c^2 = a^2 + b^2 - 2ab \cdot 0 = a^2 + b^2$$

Вот почему теорема Пифагора — не отдельный факт, а частный случай теоремы косинусов при прямом угле. Теорема косинусов — это «исправленная» версия, которая добавляет поправку $-2ab\cos C$, зависящую от того, насколько угол отклоняется от прямого.

Что означает знак поправки:

  • Если угол $C$ острый ($\cos C > 0$), поправка отрицательна — третья сторона получается короче, чем предсказал бы Пифагор.

  • Если угол $C$ тупой ($\cos C < 0$), минус на минус даёт плюс — поправка становится положительной, и третья сторона длиннее.

  • Если угол $C$ прямой ($\cos C = 0$), поправки нет вообще — это в точности теорема Пифагора.


Блок 2: Откуда берётся формула — вывод через координаты

Формулу не обязательно принимать на веру. Её легко вывести самому, если поставить треугольник в систему координат — и заодно этот способ вывода сразу свяжет теорему косинусов с векторами, что пригодится в блоке про машинное обучение.

Представь, что ты помещаешь вершину $C$ в начало координат, а сторону $a$ (то есть сторону $CB$) кладёшь вдоль оси $x$. Тогда:

  • Точка $C = (0, 0)$

  • Точка $B = (a, 0)$ — она на расстоянии $a$ от начала координат вдоль оси $x$

  • Точка $A$ находится на расстоянии $b$ от $C$, под углом $C$ к оси $x$. Значит, её координаты: $A = (b\cos C,\; b\sin C)$

Это просто определение синуса и косинуса: если из начала координат отложить отрезок длины $b$ под углом $C$ к горизонтали, то его конец окажется ровно в точке $(b\cos C, b \sin C)$.

Теперь сторона $c$ — это расстояние между точками $A$ и $B$. Используем обычную формулу расстояния между точками (по сути — теорему Пифагора для координатных разностей):

$$c^2 = (b\cos C - a)^2 + (b\sin C - 0)^2$$

Раскроем скобки:

$$c^2 = b^2\cos^2 C - 2ab\cos C + a^2 + b^2\sin^2 C$$

Сгруппируем члены с $b^2$:

$$c^2 = a^2 - 2ab\cos C + b^2(\cos^2 C + \sin^2 C)$$

А теперь вспомни основное тригонометрическое тождество: $\sin^2 C + \cos^2 C = 1$ для любого угла $C$. Подставляем:

$$c^2 = a^2 - 2ab\cos C + b^2 \cdot 1 = a^2 + b^2 - 2ab\cos C$$

Вот и всё — формула выведена. Никакого волшебства, только определение синуса-косинуса, формула расстояния и одно тождество.

Почему это важно. Обрати внимание на структуру вывода: точки $A$ и $B$ можно рассматривать как концы двух векторов, выходящих из $C$ — вектора $\vec{u}$ длины $b$ и вектора $\vec{v}$ длины $a$. Тогда $c$ — это длина вектора разности $\vec{u} - \vec{v}$. Формула $c^2 = a^2 + b^2 - 2ab\cos C$ — это в точности формула квадрата длины разности двух векторов через их длины и угол между ними. Ты только что вывел не просто геометрический факт о треугольниках, а универсальное свойство любых векторов на плоскости (и в пространстве тоже — доказательство один в один переносится на 3D и выше). Именно эта векторная форма и лежит в основе cosine similarity, к которой мы вернёмся в блоке 5.


Блок 3: Примеры с разбором — находим третью сторону

Пример 1 (лёгкий): Проверка через прямой угол

Задача: Стороны треугольника, прилегающие к углу $C$, равны 5 и 12, угол $C = 90°$. Найди третью сторону.

Решение:

$$c^2 = a^2 + b^2 - 2ab\cos C = 5^2 + 12^2 - 2\cdot5\cdot12\cdot\cos 90°$$

Поскольку $\cos 90° = 0$, последний член обнуляется:

$$c^2 = 25 + 144 - 0 = 169$$$$c = \sqrt{169} = 13$$

Ответ: $c = 13$.

Это знаменитая пифагорова тройка 5-12-13 — и не случайно: при прямом угле теорема косинусов и теорема Пифагора дают идентичный результат. Это хорошая проверка: если в задаче угол 90°, твой ответ обязан совпасть с обычным Пифагором.


Пример 2 (средний): Острый угол, не дающий круглого числа

Задача: Две стороны треугольника равны 6 и 10, угол между ними 60°. Найди третью сторону.

Решение:

$$c^2 = 6^2 + 10^2 - 2\cdot6\cdot10\cdot\cos 60°$$$$\cos 60° = 0.5$$$$c^2 = 36 + 100 - 120\cdot0.5 = 136 - 60 = 76$$$$c = \sqrt{76} = 2\sqrt{19} \approx 8{,}72$$

Ответ: $c \approx 8{,}72$.

Обрати внимание: ответ не круглый, и это нормально. В реальных задачах — навигации, физике, инженерии — далеко не всегда получаются красивые целые числа. Умение довести вычисление до десятичной дроби и не пугаться иррационального числа под корнем — обязательный навык.


Пример 3 (средний-сложный): Находим наибольший угол по трём сторонам

Задача: Стороны треугольника равны 5, 6 и 7. Найди наибольший угол.

Решение:

Наибольший угол лежит против наибольшей стороны — значит, ищем угол против стороны 7. Выразим косинус угла из теоремы косинусов:

$$c^2 = a^2 + b^2 - 2ab\cos C \implies \cos C = \frac{a^2+b^2-c^2}{2ab}$$

Подставляем $a=5$, $b=6$, $c=7$:

$$\cos C = \frac{5^2+6^2-7^2}{2\cdot5\cdot6} = \frac{25+36-49}{60} = \frac{12}{60} = 0{,}2$$$$C = \arccos(0{,}2) \approx 78{,}46°$$

Ответ: наибольший угол треугольника $\approx 78{,}46°$.

Заметь: угол получился острым, хотя он и самый большой в треугольнике. Это нормально — «наибольший» не значит «тупой». Тупым он оказался бы только в том случае, если бы $\cos C$ вышел отрицательным.


Пример 4 (сложный, прикладной): Равнодействующая двух сил

Задача: На тело действуют две силы: 40 Н и 60 Н, угол между направлениями сил 130°. Найди величину равнодействующей силы.

Решение:

Сложение векторов сил геометрически — это построение треугольника (или параллелограмма) сил, и величина равнодействующей находится ровно теоремой косинусов, где угол между силами и есть угол между сторонами:

$$F^2 = F_1^2 + F_2^2 - 2F_1F_2\cos(180° - \alpha)$$

Здесь важно аккуратно определить, какой угол подставлять. Если угол между направлениями самих сил (как их обычно рисуют, выходящими из одной точки) равен 130°, то в треугольнике сил, где равнодействующая замыкает фигуру, угол между сторонами $F_1$ и $F_2$ равен именно 130° (это угол приложения между векторами сил, и он же — угол в треугольнике при условии, что мы строим треугольник напрямую по правилу «конец одного вектора — начало другого», без дополнительного разворота). Подставляем напрямую:

$$F^2 = 40^2 + 60^2 - 2\cdot40\cdot60\cdot\cos130°$$$$\cos130° \approx -0{,}6428$$$$F^2 = 1600 + 3600 - 4800\cdot(-0{,}6428) = 5200 + 3085{,}4 = 8285{,}4$$$$F \approx \sqrt{8285{,}4} \approx 91{,}0 \text{ Н}$$

Ответ: равнодействующая $\approx 91{,}0$ Н.

Почему это важно. Обрати внимание: угол между силами тупой (130°), и равнодействующая (91 Н) оказалась больше, чем при остром угле была бы. Это интуитивно понятно: если силы «тянут почти в противоположные стороны», казалось бы, они должны гасить друг друга — но здесь 130° это ещё не 180°, силы всё ещё частично складываются. При угле ровно 180° (силы строго противоположны) получилось бы $F = |F_1 - F_2| = 20$ Н — минимум возможного результата. При угле 0° (силы сонаправлены) — $F = F_1 + F_2 = 100$ Н, максимум. Теорема косинусов плавно интерполирует между этими крайностями.


Блок 4: Обратная задача — находим все углы по трём сторонам

Иногда у тебя нет ни одного угла — только три стороны. Например, геодезист измерил расстояния между тремя точками рулеткой или лазерным дальномером, но углы не измерял. Теорема косинусов и здесь работает: она позволяет полностью решить треугольник, зная лишь длины сторон.

Формула для угла, выведенная простым переносом членов:

$$\cos A = \frac{b^2+c^2-a^2}{2bc}, \qquad \cos B = \frac{a^2+c^2-b^2}{2ac}, \qquad \cos C = \frac{a^2+b^2-c^2}{2ab}$$

Полезный лайфхак: чтобы найти третий угол, не обязательно вычислять третий арккосинус — можно просто использовать то, что сумма углов треугольника равна 180°: $C = 180° - A - B$. Это и быстрее, и служит проверкой правильности первых двух вычислений.

Пример: полностью решаем треугольник по трём сторонам

Задача: Стороны треугольника равны 8, 9 и 10. Найди все три угла.

Решение:

Обозначим сторону $a=8$ (противолежит углу $A$), $b=9$ (углу $B$), $c=10$ (углу $C$).

Шаг 1. Находим угол $A$:

$$\cos A = \frac{b^2+c^2-a^2}{2bc} = \frac{81+100-64}{2\cdot9\cdot10} = \frac{117}{180} = 0{,}65$$$$A = \arccos(0{,}65) \approx 49{,}46°$$

Шаг 2. Находим угол $B$:

$$\cos B = \frac{a^2+c^2-b^2}{2ac} = \frac{64+100-81}{2\cdot8\cdot10} = \frac{83}{160} \approx 0{,}519$$$$B = \arccos(0{,}519) \approx 58{,}75°$$

Шаг 3. Находим третий угол через сумму 180°, не вычисляя арккосинус третий раз:

$$C = 180° - A - B \approx 180° - 49{,}46° - 58{,}75° = 71{,}79°$$

Ответ: $A \approx 49{,}46°$, $B \approx 58{,}75°$, $C \approx 71{,}79°$.

Проверка: можно вычислить $C$ и напрямую через $\cos C = \dfrac{a^2+b^2-c^2}{2ab} = \dfrac{64+81-100}{144} = \dfrac{45}{144} \approx 0{,}3125$, и $\arccos(0{,}3125) \approx 71{,}79°$ — совпадает. Значит, вычисления верны.

Почему это важно. Заметь ключевое отличие от теоремы синусов: арккосинус на отрезке $[0°, 180°]$ — однозначная функция (у неё нет неоднозначности «острый или тупой», как у арксинуса). Поэтому теорема косинусов надёжнее для поиска углов: результат всегда единственный, и никакого «второго случая» проверять не нужно. Это одна из причин, почему в инженерных и навигационных расчётах теорему косинусов часто предпочитают теореме синусов для нахождения углов.


Блок 5: Косинусное сходство в ML — та же формула, только для векторов

Давай разберёмся, где эта формула прячется в машинном обучении. В блоке 2 мы вывели, что для двух векторов $\vec{u}$ и $\vec{v}$, выходящих из одной точки, с длинами $|\vec{u}|$ и $|\vec{v}|$ и углом $\theta$ между ними, квадрат длины их разности равен:

$$|\vec{u} - \vec{v}|^2 = |\vec{u}|^2 + |\vec{v}|^2 - 2|\vec{u}||\vec{v}|\cos\theta$$

Это ровно теорема косинусов, только буквы $a$, $b$, $c$ заменены на длины векторов. Но есть и другая форма этого же равенства через скалярное произведение (dot product): для любых векторов $|\vec{u}-\vec{v}|^2 = |\vec{u}|^2 + |\vec{v}|^2 - 2(\vec{u}\cdot\vec{v})$. Сравнивая два выражения, получаем:

$$\vec{u}\cdot\vec{v} = |\vec{u}||\vec{v}|\cos\theta$$

Это фундаментальная связь между скалярным произведением и углом между векторами — и, разрешив это равенство относительно $\cos\theta$, ты получаешь ровно cosine similarity:

$$\cos\theta = \frac{\vec{u}\cdot\vec{v}}{|\vec{u}||\vec{v}|}$$

Вот и весь секрет. Cosine similarity — не отдельная придуманная в ML формула, а теорема косинусов, решённая относительно косинуса угла между векторами. Именно поэтому она называется косинусным сходством: она в буквальном смысле измеряет косинус угла между двумя векторами в многомерном пространстве.

Зачем это нужно в реальных системах. В NLP и рекомендательных системах документы, слова, товары или пользователи превращают в векторы (эмбеддинги) — точки в пространстве из сотен или тысяч измерений. Чтобы понять, насколько два объекта похожи по смыслу, не обязательно измерять расстояние между ними (оно зависит от масштаба векторов) — гораздо надёжнее смотреть на угол между векторами. Если угол маленький ($\cos\theta$ близок к 1) — векторы «смотрят в одну сторону», объекты семантически похожи. Если угол около 90° ($\cos\theta \approx 0$) — объекты не связаны. Если угол близок к 180° ($\cos\theta$ близок к $-1$) — объекты противоположны по смыслу.

Пример: похожи ли "король" и "королева"?

Задача: Пусть в игрушечном 3-мерном пространстве эмбеддингов слово «король» представлено вектором $(0{,}9;\ 0{,}1;\ 0{,}2)$, а «королева» — вектором $(0{,}85;\ 0{,}15;\ 0{,}25)$. Найди косинусное сходство между ними.

Решение:

Шаг 1. Скалярное произведение:

$$\vec{u}\cdot\vec{v} = 0{,}9\cdot0{,}85 + 0{,}1\cdot0{,}15 + 0{,}2\cdot0{,}25 = 0{,}765 + 0{,}015 + 0{,}05 = 0{,}83$$

Шаг 2. Длины векторов:

$$|\vec{u}| = \sqrt{0{,}9^2+0{,}1^2+0{,}2^2} = \sqrt{0{,}86} \approx 0{,}927$$$$|\vec{v}| = \sqrt{0{,}85^2+0{,}15^2+0{,}25^2} = \sqrt{0{,}8075} \approx 0{,}899$$

Шаг 3. Косинусное сходство:

$$\cos\theta = \frac{0{,}83}{0{,}927\cdot0{,}899} \approx \frac{0{,}83}{0{,}833} \approx 0{,}996$$

Ответ: сходство $\approx 0{,}996$, что соответствует углу $\theta \approx 5{,}2°$ — векторы почти сонаправлены.

Это ровно то поведение, которое мы ожидаем от хорошо обученной модели эмбеддингов: слова «король» и «королева» семантически близки, и их векторы должны «смотреть» почти в одном направлении.

В коде это выглядит так:

import numpy as np

king = np.array([0.9, 0.1, 0.2])
queen = np.array([0.85, 0.15, 0.25])

cos_sim = np.dot(king, queen) / (np.linalg.norm(king) * np.linalg.norm(queen))
print(f"cosine similarity: {cos_sim:.4f}")   # ≈ 0.9959

На практике эмбеддинги имеют не 3, а сотни или тысячи измерений (модели вроде text-embedding-3 или sentence-transformers выдают векторы размерности 384-3072), но формула не меняется ни на йоту — просто сумма в скалярном произведении становится длиннее. В библиотеках для этого есть готовые функции: sklearn.metrics.pairwise.cosine_similarity, а поисковые движки по векторам (FAISS, Pinecone, Qdrant, pgvector) в качестве метрики близости чаще всего по умолчанию используют именно косинусное расстояние ($1 - \cos\theta$) — ровно то, что мы только что вывели из теоремы, известной со времён Евклида.

Почему это важно. Когда ты в следующий раз увидишь в статье про RAG (Retrieval-Augmented Generation) или семантический поиск фразу «находим ближайшие по cosine similarity документы» — ты будешь точно знать, что происходит: система строит мысленный треугольник между векторами запроса и документа, вычисляет угол между ними по формуле, которую вывел ещё Евклид для треугольников на бумаге, и сортирует документы по тому, насколько этот угол мал.


Практика: 30 заданий

Базовые (задания 1–10)

Задание 1: Стороны треугольника, прилегающие к углу $C$, равны 6 и 8, угол $C = 90°$. Найди третью сторону.


Задание 2: Две стороны треугольника равны 5 и 8, угол между ними 60°. Найди третью сторону.


Задание 3: Две стороны треугольника равны 3 и 5, угол между ними 120°. Найди третью сторону.


Задание 4: Две стороны треугольника равны 7 и 7, угол между ними 60°. Найди третью сторону.


Задание 5: Стороны треугольника равны 3, 4, 5. Найди косинус наибольшего угла.


Задание 6: Две стороны треугольника равны 10 и 10, угол между ними 90°. Найди третью сторону.


Задание 7: Стороны треугольника равны 2, 3, 4. Найди косинус наибольшего угла.


Задание 8: Стороны треугольника, прилегающие к прямому углу, равны 9 и 12. Найди третью сторону.


Задание 9: Две стороны треугольника равны 4 и 4, угол между ними 135°. Найди третью сторону.


Задание 10: Стороны треугольника равны 5, 5, 5. Найди угол $C$, лежащий между двумя сторонами длины 5.


Средние (задания 11–20)

Задание 11: Самолёт вылетел из точки $O$ и пролетел 300 км по прямой до точки $A$. В точке $A$ он изменил курс: следующий участок $AB$ составил 200 км, а угол между отрезками $OA$ и $AB$ (угол в точке поворота) равен 100°. Найди расстояние $OB$ по прямой.


Задание 12: GPS показывает, что ты находишься в 8 км от вышки A и в 12 км от вышки B. Угол между направлениями на вышки 110°. Найди расстояние между вышками.


Задание 13: В параллелограмме стороны равны 6 и 10, острый угол между ними 70°. Найди обе диагонали.


Задание 14: Стороны треугольника равны 7, 10, 13. Найди все три угла.


Задание 15: В рекомендательной системе профиль пользователя представлен вектором $(1, 0)$, а профиль товара — вектором $(0, 1)$. Найди косинусное сходство между ними.


Задание 16: Два товарных эмбеддинга: $\vec u=(3,4)$ и $\vec v=(4,3)$. Найди косинусное сходство.


Задание 17: Существует ли треугольник со сторонами 5, 7 и 15? Обоснуй ответ через теорему косинусов.


Задание 18: Часовая и минутная стрелки часов имеют длины 3 см и 5 см. В 3:00 угол между ними ровно 90°. Найди расстояние между кончиками стрелок.


Задание 19: Векторы двух эмбеддингов: $\vec u=(2,0)$ и $\vec v=(1,1)$. Найди угол между ними.


Задание 20: Две стороны треугольника равны 11 и 9, угол между ними 150°. Найди третью сторону.


Продвинутые (задания 21–30)

Задание 21: Выведи формулу для длины медианы $m_c$, проведённой из вершины $C$ к середине стороны $c$, через стороны треугольника $a$, $b$, $c$. Примени формулу к треугольнику со сторонами $a=8$, $b=10$, $c=12$.


Задание 22: Две стороны треугольника равны 5 и 6, угол между ними 120°. Найди третью сторону и площадь треугольника (площадь $=\frac12 ab\sin C$).


Задание 23: Эмбеддинги двух документов в 3D-пространстве признаков: $\vec u=(1,2,2)$ и $\vec v=(2,2,1)$. Найди угол между ними.


Задание 24: В треугольнике сторона $a=5$, сторона $b=7$, угол $A=30°$ (угол, противолежащий стороне $a$, а не зажатый между известными сторонами). Найди сторону $c$.


Задание 25: Докажи на конкретном примере теорему о сумме квадратов диагоналей параллелограмма $d_1^2+d_2^2=2(a^2+b^2)$, используя теорему косинусов. Стороны параллелограмма 6 и 9, угол между ними 50°.


Задание 26: В системе рекомендаций есть три вектора товаров: $\vec u=(3,1,0)$, $\vec v=(1,3,0)$, $\vec w=(0,0,5)$. Найди, какая пара товаров наиболее похожа.


Задание 27: Три города A, B, C: расстояние $AB=120$ км, $BC=200$ км, $AC=150$ км. Найди угол при городе B (угол между дорогами BA и BC).


Задание 28: Стороны треугольника равны 4, 5, 7. Найди наибольший угол.


Задание 29: Докажи, что если в треугольнике со сторонами $a=9$, $b=12$, $c=15$ выполняется $c^2=a^2+b^2$, то угол $C$ обязательно равен 90° — используя теорему косинусов, а не просто ссылаясь на теорему Пифагора.


Задание 30: Система поиска похожих товаров. Запрос представлен вектором $\vec q=(4,0,3)$. Кандидат A: $\vec a=(2,0,1{,}5)$. Кандидат B: $\vec b=(0,4,3)$. Какой кандидат более релевантен запросу по cosine similarity?


Частые ошибки

Ошибка 1: Подставляют угол, который не лежит между известными сторонами

Правильно: в формуле $c^2=a^2+b^2-2ab\cos C$ угол $C$ обязан быть зажат именно между сторонами $a$ и $b$. Если известный угол противолежит одной из известных сторон (как в задании 24), формула превращается в квадратное уравнение — это другой случай, и решать его нужно иначе.

💡 Почему: формула выведена геометрически из треугольника с конкретным расположением угла между сторонами — подставлять в неё «любой» угол просто некорректно с точки зрения вывода.


Ошибка 2: Забывают минус перед $2ab\cos C$

Правильно: формула — это сумма квадратов минус удвоенное произведение на косинус: $c^2=a^2+b^2-2ab\cos C$, а не плюс.

💡 Почему: этот минус — не случайная деталь, а суть поправки к теореме Пифагора. Забыв его, ты получишь формулу, которая вообще не работает даже при остром угле.


Ошибка 3: Не учитывают двойной знак минуса при тупом угле

Правильно: при $C>90°$ косинус отрицателен, и выражение $-2ab\cos C$ становится положительным (минус на минус). Реальный расчёт: $-2ab\cos120° = -2ab\cdot(-0{,}5) = +ab$.

💡 Почему: многие по инерции вычитают, даже когда $\cos C$ уже отрицателен, и получают заниженный (а иногда и отрицательный, что вообще невозможно) результат для $c^2$.


Ошибка 4: Не проверяют, что $\cos C$ попал в диапазон $[-1;1]$

Правильно: после вычисления $\cos C = \dfrac{a^2+b^2-c^2}{2ab}$ всегда проверяй, что значение лежит между $-1$ и $1$. Если нет — треугольника с такими сторонами не существует (нарушено неравенство треугольника, как в задании 17).

💡 Почему: калькулятор или Python выдаст ошибку (math domain error для math.acos) или nan, если подать на вход число вне $[-1;1]$ — и это сигнал, что в задаче ошибка в исходных данных, а не в вычислениях.


Ошибка 5: Путают, какая сторона противолежит какому углу в формуле для SSS

Правильно: в формуле $\cos A = \dfrac{b^2+c^2-a^2}{2bc}$ сторона, которую вычитают в числителе ($a$), — это именно та сторона, которая противолежит искомому углу $A$, а в знаменателе стоят две другие стороны.

💡 Почему: перепутав местами, ты вычислишь косинус совершенно другого угла — и в отличие от ошибки со знаком, эта ошибка не даст явно невозможного числа, поэтому её легко не заметить.


Ошибка 6 (концептуальная, в контексте ML): путают cosine similarity с евклидовым расстоянием

Правильно: cosine similarity измеряет угол между векторами и не зависит от их длины; евклидово расстояние измеряет именно расстояние между точками и зависит от длины (масштаба) векторов напрямую.

💡 Почему: два вектора могут быть направлены абсолютно одинаково (cosine similarity $=1$), но находиться далеко друг от друга в смысле евклидова расстояния, если один из них намного длиннее другого — как показано в задании 30. Для задач, где важна семантика, а не абсолютная величина (частота слов, длина документа), cosine similarity почти всегда правильнее.


Главное запомнить

✅ Теорема косинусов работает для любого треугольника, не только прямоугольного: $c^2=a^2+b^2-2ab\cos C$, где $C$ — угол между сторонами $a$ и $b$.

✅ Теорема Пифагора — частный случай при $C=90°$: тогда $\cos C=0$ и поправка обнуляется.

✅ При остром угле поправка отрицательна (сторона короче), при тупом — положительна (сторона длиннее).

✅ Формулу можно вывести самостоятельно через координаты: поставить один угол в начало координат и применить формулу расстояния плюс тождество $\sin^2+\cos^2=1$.

✅ Для нахождения стороны по двум сторонам и углу между ними (SAS) — подставляй напрямую.

✅ Для нахождения угла по трём сторонам (SSS) — выражай косинус: $\cos C=\dfrac{a^2+b^2-c^2}{2ab}$, третий угол проще всего найти через $180°$ минус сумма первых двух.

✅ Если вычисленный $\cos C$ выходит за пределы $[-1;1]$ — треугольника с такими сторонами не существует.

✅ В отличие от теоремы синусов, арккосинус на $[0°;180°]$ однозначен — никакой неоднозначности «острый или тупой угол» при поиске угла по теореме косинусов нет.

✅ Векторная форма той же теоремы: $|\vec u-\vec v|^2=|\vec u|^2+|\vec v|^2-2\vec u\cdot\vec v$, откуда следует cosine similarity: $\cos\theta=\dfrac{\vec u\cdot\vec v}{|\vec u||\vec v|}$.

✅ Cosine similarity в ML — это буквально теорема косинусов, решённая относительно угла между эмбеддингами, и именно она используется в поиске, рекомендациях и RAG-системах.


Связь с другими темами курса

Что нужно было знать до этого урока:

  • Теорема Пифагора — теорема косинусов её напрямую обобщает

  • Теорема синусов (урок 109) — вместе с теоремой косинусов образует полный инструментарий для решения произвольных треугольников

  • Основное тригонометрическое тождество $\sin^2 x+\cos^2 x=1$ — используется в выводе формулы

  • Система координат и формула расстояния между точками — на них строится координатный вывод теоремы

Что пригодится дальше:

  • Векторы — теорема косинусов в векторной форме станет формальным определением скалярного произведения через угол

  • Комплексные числа и их геометрическая интерпретация — расстояния между точками на комплексной плоскости считаются похожим образом

  • Позже в курсе появится производная (с урока 133) — но заметь, что весь материал этого урока не требует ни одной производной: теорема косинусов — целиком алгебраическая и геометрическая история

Где это применяется в жизни и в профессии:

📡 В навигации и геодезии: GPS-трилатерация, триангуляционные съёмки местности (в том числе историческое измерение высоты Эвереста).

🏗️ В инженерии и физике: сложение сил и векторов под углом друг к другу, расчёт равнодействующих, механика ферм и конструкций.

🤖 В машинном обучении: cosine similarity — стандартная метрика близости для эмбеддингов в семантическом поиске, рекомендательных системах, кластеризации документов и retrieval-компоненте RAG-пайплайнов.

📊 В data science: сравнение векторов признаков, feature similarity, anti-duplicate detection (поиск почти одинаковых записей по направлению вектора признаков, а не по абсолютным значениям).


Интересные факты

💡 Геометрия раньше тригонометрии. Евклид доказал теорему косинусов почти за две тысячи лет до того, как появилось само слово «косинус» — целиком через площади квадратов и прямоугольников, без единой тригонометрической функции. Современная запись со знаком $\cos$ — намного более позднее удобство.

💡 Названа в честь среднеазиатского астронома. Во французской математической традиции теорему косинусов часто называют «théorème d'Al-Kashi» — в честь Гияс ад-Дина Джамшида аль-Каши, работавшего в обсерватории Улугбека в Самарканде в XV веке и активно применявшего её для астрономических расчётов.

💡 Без неё не измерили бы Эверест. Great Trigonometric Survey — грандиозная британская триангуляционная съёмка Индии XIX века — использовала теорему косинусов и теорему синусов, чтобы по цепочке треугольников вычислить расстояния и высоты недоступных точек, включая высочайшую вершину мира, без единого спутника.

💡 «Король минус мужчина плюс женщина ≈ королева». Знаменитый пример из статьи Миколова и коллег про word2vec (2013) — векторная арифметика над эмбеддингами слов — проверяется именно через cosine similarity: находят вектор $\vec{king}-\vec{man}+\vec{woman}$ и ищут ближайшее по косинусному сходству слово в словаре. Чаще всего это оказывается «queen» — прямое следствие той самой формулы Евклида, применённой к языковым моделям спустя более двух тысячелетий.


Лайфхаки и полезные трюки

1. Всегда проверяй частный случай 90°

Если в задаче угол ровно 90°, ответ обязан совпасть с обычной теоремой Пифагора. Если не совпал — где-то ошибка в вычислениях.

2. Запоминай правило знака через интуицию, а не зубрёжку

Острый угол — сторона «сжимается» относительно Пифагора (вычитаем положительную поправку). Тупой угол — сторона «растягивается» (поправка становится положительной за счёт минус на минус). Прямой угол — поправки нет вообще.

3. Для SSS находи только два угла через арккосинус, третий — через 180°

Это не только быстрее, но и служит встроенной проверкой: если сумма трёх углов (двух вычисленных плюс найденного через вычитание) внезапно не сходится с ожиданиями по форме треугольника — где-то ошибка.

4. Проверяй неравенство треугольника перед тем, как решать задачу

Если даны три стороны, быстро проверь $a+b>c$, $a+c>b$, $b+c>a$. Это займёт секунды и убережёт от бессмысленных вычислений над несуществующим треугольником.

5. В коде всегда используй clip перед arccos

Из-за ошибок округления с плавающей точкой вычисленный косинус иногда оказывается вроде $1{,}0000000002$ — формально невозможное значение, из-за которого math.acos() или np.arccos() выбросит ошибку. Стандартная защита:

import numpy as np

cos_val = np.clip(cos_val, -1.0, 1.0)
angle = np.arccos(cos_val)

6. Для cosine similarity в больших системах — нормализуй векторы заранее

Если заранее привести все векторы к единичной длине ($|\vec u|=1$), то cosine similarity превращается в простое скалярное произведение $\vec u\cdot\vec v$ — без деления на нормы. Это заметно ускоряет вычисления при сравнении миллионов эмбеддингов, потому что нормализация делается один раз при индексации, а не при каждом запросе.


Теорема косинусов — это ровно тот случай в математике, когда одна и та же короткая формула работает и на школьной доске с треугольником и транспортиром, и внутри поисковой системы, сравнивающей миллионы векторных представлений документов. Ты вывел её из координат, применил к треугольникам, силам и городам на карте, а потом увидел её же в сердце cosine similarity. Дальше в курсе formal векторы появятся снова — и когда это случится, ты уже будешь знать, откуда на самом деле берётся формула угла между ними.

Понял тему? Закрепи в боте! 🚀

Попрактикуйся на задачах и получи персональные рекомендации от AI

💪 Начать тренировку
💬 Есть вопрос? Спроси бота!