Векторное произведение a×b: площадь и нормаль
Векторное произведение строит новый вектор, перпендикулярный обоим исходным, длиной в площадь между ними.
Векторное произведение $\vec a \times \vec b$ — вектор, перпендикулярный плоскости $\vec a, \vec b$, длиной $|\vec a||\vec b|\sin\theta$, направленный по правилу правой руки.
Формула через детерминант
Удобнее всего запомнить векторное произведение как «детерминант» с ортами в первой строке:
$$\vec a \times \vec b = \begin{vmatrix} \vec e_x & \vec e_y & \vec e_z \\ a_x & a_y & a_z \\ b_x & b_y & b_z \end{vmatrix}$$
Раскрывая, получаем покомпонентно:
$$\vec a \times \vec b = (a_y b_z - a_z b_y,\; a_z b_x - a_x b_z,\; a_x b_y - a_y b_x)$$
Геометрия: площадь
Длина результата равна площади параллелограмма, натянутого на $\vec a$ и $\vec b$:
$$|\vec a \times \vec b| = |\vec a|\,|\vec b|\sin\theta = S_{\text{парал.}}$$
Площадь треугольника — половина этого. Заметьте контраст со скалярным произведением: там был $\cos$ (совпадение направлений), здесь $\sin$ (расхождение направлений).
Считаем на Python
import math
def cross(a, b):
return (a[1]*b[2] - a[2]*b[1],
a[2]*b[0] - a[0]*b[2],
a[0]*b[1] - a[1]*b[0])
def norm(v):
return math.sqrt(sum(c*c for c in v))
a = (1, 0, 0)
b = (0, 1, 0)
c = cross(a, b)
print("a x b =", c)
print("Площадь параллелограмма =", norm(c))
# Перпендикулярность проверим скалярными произведениями
print("(a x b)·a =", sum(x*y for x, y in zip(c, a)))
print("(a x b)·b =", sum(x*y for x, y in zip(c, b)))Вывод:
a x b = (0, 0, 1) Площадь параллелограмма = 1.0 (a x b)·a = 0 (a x b)·b = 0
Как работает под капотом
Векторное произведение антикоммутативно: $\vec b \times \vec a = -(\vec a \times \vec b)$. Поэтому порядок важен — он задаёт, в какую из двух перпендикулярных сторон смотрит результат. Правило правой руки: пальцы загибаются от $\vec a$ к $\vec b$, большой палец показывает $\vec a \times \vec b$. Если $\vec a \parallel \vec b$, то $\sin\theta = 0$ и произведение нулевое — это признак коллинеарности.
Частые ошибки
- Путать порядок: $\vec a \times \vec b \neq \vec b \times \vec a$, они противоположны.
- Думать, что результат — число. Нет, это вектор (в отличие от скалярного произведения).
- Применять в 2D буквально: в плоскости $\vec a \times \vec b$ сводится к одному числу $a_x b_y - a_y b_x$ (z-компонента).
Итог
- $\vec a \times \vec b$ — вектор, перпендикулярный обоим, длиной в площадь параллелограмма.
- Антикоммутативность: смена порядка меняет знак.
- Нулевой результат означает параллельность векторов.