Скалярное произведение и угол между векторами

Скалярное произведение измеряет, насколько два вектора смотрят в одну сторону.

Скалярное произведение $\vec a \cdot \vec b$ — число, равное $a_x b_x + a_y b_y + a_z b_z$, или, эквивалентно, $|\vec a||\vec b|\cos\theta$.

Две формулы — один смысл

Есть «координатная» формула и «геометрическая», и они равны:

$$\vec a \cdot \vec b = a_x b_x + a_y b_y + a_z b_z = |\vec a|\,|\vec b|\cos\theta$$

Из равенства правых частей вытекает рабочая формула угла:

$$\cos\theta = \frac{\vec a \cdot \vec b}{|\vec a|\,|\vec b|}$$

Если $\vec a \cdot \vec b = 0$ (и векторы ненулевые), то $\cos\theta = 0$, то есть $\theta = 90^\circ$ — это признак перпендикулярности.

Проекция

Скалярное произведение отвечает на вопрос «сколько одного вектора лежит вдоль другого». Длина проекции $\vec a$ на направление $\vec b$:

$$\text{пр}_{\vec b}\,\vec a = \frac{\vec a \cdot \vec b}{|\vec b|}$$

Считаем угол на Python

import math

def dot(a, b):
    return sum(x*y for x, y in zip(a, b))

def norm(a):
    return math.sqrt(dot(a, a))

a = (1, 2, 2)
b = (2, 0, 1)

d = dot(a, b)
cos_t = d / (norm(a) * norm(b))
theta = math.degrees(math.acos(cos_t))
print("Скалярное произведение =", d)
print("cos(theta) =", round(cos_t, 4))
print("Угол, градусы =", round(theta, 2))

Вывод:

Скалярное произведение = 4
cos(theta) = 0.5963
Угол, градусы = 53.4

Как работает под капотом

Почему координатная формула совпадает с косинусной? Распишем $\vec b - \vec a$ по теореме косинусов: $|\vec b - \vec a|^2 = |\vec a|^2 + |\vec b|^2 - 2|\vec a||\vec b|\cos\theta$. С другой стороны, $|\vec b - \vec a|^2 = \sum (b_i - a_i)^2$ раскрывается в $|\vec a|^2 + |\vec b|^2 - 2\sum a_i b_i$. Сравнив, получаем $\sum a_i b_i = |\vec a||\vec b|\cos\theta$. Косинус «прячется» внутри обычной арифметики координат.

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

  • Считать, что результат скалярного произведения — вектор. Нет, это число (скаляр), отсюда и название.
  • Делить на ноль при нормировке нулевого вектора — угол с нулём не определён.
  • Забывать про знак: отрицательное произведение значит тупой угол ($\theta \gt 90^\circ$).

Итог

  • $\vec a \cdot \vec b$ — число, две формулы дают одно и то же.
  • Знак произведения говорит про угол: $+$ острый, $0$ прямой, $-$ тупой.
  • Через него считают угол, проекцию и проверяют перпендикулярность.
Проверьте себя
1. Векторы a и b ненулевые, и a·b = 0. Что это значит?
AОни параллельны
BОни перпендикулярны
CОдин из них нулевой
DУгол между ними острый
2. Скалярное произведение двух векторов — это…
Aвектор
Bматрица
Cчисло (скаляр)
Dугол
3. Отрицательное скалярное произведение говорит, что угол между векторами…
Aпрямой
Bострый
Cтупой
Dнулевой