Скалярное произведение и угол между векторами
Скалярное произведение измеряет, насколько два вектора смотрят в одну сторону.
Скалярное произведение $\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$ прямой, $-$ тупой.
- Через него считают угол, проекцию и проверяют перпендикулярность.