Линейная алгебра
Векторное произведение: перпендикуляр из двух векторов
Нормаль к поверхности в 3D-графике, момент силы в физике двигателя, ориентация самолёта в пространстве - всё это вычисляется через векторное произведение. Unity и Unreal Engine вызывают его каждый кадр для расчёта освещения.
- 3D-графика: нормаль к треугольнику для расчёта освещения - кросс-продукт двух рёбер
- Робототехника: момент силы - τ = r × F, управление манипуляторами
- Авиация: угловая скорость и момент инерции в системе ориентации
- Компьютерное зрение: ориентация плоскости в 3D-реконструкции
- Физика: сила Лоренца на заряд в магнитном поле - F = qv × B
Векторное произведение: перпендикуляр из двух векторов
**Каждая поверхность в 3D-игре знает, куда она смотрит.** Без этого знания невозможно посчитать освещение: свет падает спереди или сзади? Под каким углом? GPU делает этот расчёт для миллиардов пикселей в секунду, и в основе - **векторное произведение**. Операция берёт два вектора в плоскости и выдаёт третий, перпендикулярный обоим. Скалярное произведение давало число - мерило угол. Векторное произведение даёт вектор - строит направление.
**О чём этот урок на самом деле**: не просто формула для перпендикуляра - а три класса реальных задач: освещение в 3D-графике (normal vectors), вращение и крутящий момент в физике и робототехнике, ориентация камеры в SLAM. Все три сводятся к одной операции.
Что главное в концепте «Векторное произведение: перпендикуляр из двух векторов»?
Проверка усвоения материала концепта.
Интуиция: перпендикуляр к плоскости
Интуиция: перпендикуляр к плоскости
Два вектора a и b задают плоскость. Вектор c = a x b перпендикулярен этой плоскости: c ⊥ a и c ⊥ b одновременно. Длина c равна площади параллелограмма, построенного на a и b. Направление - по правилу правой руки.
**Проверка**: (3,0,0) x (0,2,0) = (0*0-0*2, 0*0-3*0, 3*2-0*0) = (0, 0, 6). Dot product с a: (0,0,6)·(3,0,0) = 0. Dot product с b: (0,0,6)·(0,2,0) = 0. Перпендикулярность подтверждена числами.
Что главное в концепте «Интуиция: перпендикуляр к плоскости»?
Проверка усвоения материала концепта.
Формула
Формула
a = (a1, a2, a3), b = (b1, b2, b3) a x b = ( a2*b3 - a3*b2, <- X-компонента a3*b1 - a1*b3, <- Y-компонента a1*b2 - a2*b1 <- Z-компонента ) МНЕМОНИКА (определитель 3x3): | i j k | a x b = | a1 a2 a3 | | b1 b2 b3 | СВОЙСТВА: |a x b| = |a| * |b| * sin(theta) <- площадь параллелограмма a x b = -(b x a) <- антикоммутативность a x a = 0 <- нулевой вектор (sin(0) = 0) ТОЛЬКО В 3D: в 2D нет третьего измерения для результата.
**Антикоммутативность - частая ловушка**: a x b = -(b x a). В скалярном произведении порядок не важен. В векторном - меняет знак результата. Если нормаль смотрит «не туда» в 3D-движке, это часто ошибка порядка операндов.
Что главное в концепте «Формула»?
Проверка усвоения материала концепта.
Правило правой руки: направление результата
Правило правой руки: направление результата
Направление a x b определяется **правилом правой руки**: указательный палец вдоль a, средний палец вдоль b, большой палец показывает направление a x b.
Стандартные единичные векторы: i=(1,0,0), j=(0,1,0), k=(0,0,1) i x j = k (X x Y = Z) <- правило правой руки j x k = i (Y x Z = X) k x i = j (Z x X = Y) и в обратную сторону: j x i = -k (порядок изменился - знак изменился) k x j = -i i x k = -j Запомнить: i -> j -> k -> i -> ... по циклу = плюс. Против цикла = минус.
Что главное в концепте «Правило правой руки: направление результата»?
Проверка усвоения материала концепта.
ML-применение №1: освещение в 3D-графике (GPU)
ML-применение №1: освещение в 3D-графике (GPU)
**Каждый треугольник в 3D-сцене Unreal Engine, Unity, WebGL имеет нормаль.** Нормаль - вектор, перпендикулярный поверхности. По нему GPU считает, сколько света попадает на поверхность: угол между нормалью и направлением света даёт яркость через dot product. Нормаль строится именно векторным произведением рёбер треугольника.
**Масштаб**: в кадре игры типа Cyberpunk 2077 - сотни тысяч треугольников. GPU параллельно вычисляет нормаль и освещение для каждого за миллисекунды. Один кадр = сотни миллионов операций векторного произведения. Именно поэтому видеокарты - специализированные векторные процессоры.
Что главное в концепте «ML-применение №1: освещение в 3D-графике (GPU)»?
Проверка усвоения материала концепта.
ML-применение №2: крутящий момент и угловая скорость
ML-применение №2: крутящий момент и угловая скорость
В физике и робототехнике **крутящий момент** tau = r x F, где r - радиус-вектор, F - сила. Результат перпендикулярен обоим - это ось вращения. Boston Dynamics, дроны DJI, манипуляторы KUKA используют эту формулу в каждом шаге управления.
ПРИМЕР: гаечный ключ. Длина ключа r = (0.2, 0.0, 0.0) метра Сила нажатия F = (0.0, 50.0, 0.0) Ньютон tau = r x F = (0.2, 0, 0) x (0, 50, 0) = (0*0 - 0*50, 0*0 - 0.2*0, 0.2*50 - 0*0) = (0, 0, 10) Н*м Момент = 10 Нм вдоль оси Z - это ось вращения болта. |tau| = |r| * |F| * sin(90°) = 0.2 * 50 * 1 = 10 Нм Физический смысл: чем длиннее ключ (|r|), тем больший момент при той же силе.
Что главное в концепте «ML-применение №2: крутящий момент и угловая скорость»?
Проверка усвоения материала концепта.
ML-применение №3: ориентация камеры в SLAM
ML-применение №3: ориентация камеры в SLAM
**SLAM** (Simultaneous Localization and Mapping) - алгоритм, которым роботы и беспилотные автомобили строят карту местности и одновременно определяют своё положение. Камера задаётся тремя векторами: forward (куда смотрит), up (вверх) и right. Вектор right = forward x up. Это и есть векторное произведение в реальной системе.
**Gram-Schmidt через крест**: паттерн forward -> right (cross) -> up (cross) - это часть ортогонализации Грама-Шмидта. В NeRF, 3D Gaussian Splatting, любой системе где нужна система координат камеры - ровно этот код.
Что главное в концепте «ML-применение №3: ориентация камеры в SLAM»?
Проверка усвоения материала концепта.
Площадь треугольника через векторное произведение
Площадь треугольника через векторное произведение
Длина a x b - площадь параллелограмма. Площадь треугольника - ровно вдвое меньше. Это используется в растеризации 3D-графики для проверки, попадает ли пиксель внутрь треугольника (barycentric coordinates).
ПАРАЛЛЕЛОГРАММ: S = |a x b| = |a| * |b| * sin(theta) ТРЕУГОЛЬНИК: S_triangle = |a x b| / 2 ПРИМЕР: a = (3, 0, 0), b = (1, 2, 0) a x b = (0*0 - 0*2, 0*1 - 3*0, 3*2 - 0*1) = (0, 0, 6) |a x b| = 6 S_parallelogram = 6 S_triangle = 3 ПРОВЕРКА через базовую формулу: основание = |a| = 3 высота = |b| * sin(theta) = sqrt(5) * sin(arctan(2)) = 2 S = 3 * 2 / 2 = 3 << совпало.
Что главное в концепте «Площадь треугольника через векторное произведение»?
Проверка усвоения материала концепта.
Скалярное vs Векторное произведение
Скалярное vs Векторное произведение
| Свойство | Скалярное (dot) | Векторное (cross) |
|---|---|---|
| Результат | Число | Вектор |
| Размерность | Любая | Только 3D |
| Коммутативность | a·b = b·a | a x b = -(b x a) |
| Геометрический смысл | Косинус угла, проекция | Перпендикуляр, площадь, ориентация |
| ML-применение | Cosine similarity, attention | Нормали поверхностей, крутящий момент, SLAM |
Векторное произведение в индустрии
Три класса задач - одна операция
| Компонент | Роль | Детали |
|---|---|---|
| GPU-рендеринг (Unreal, Unity, WebGL) | Нормаль треугольника для освещения | Миллиарды операций в секунду; без нормалей нет теней, бликов, Phong/PBR shading |
| Робототехника (Boston Dynamics, KUKA) | Крутящий момент и угловая скорость | tau = r x F; управление манипуляторами, балансировка, обратная кинематика |
| SLAM / NeRF / 3DGS | Система координат камеры | right = forward x up; view matrix для любого 3D-алгоритма |
| Физические движки (Bullet, PhysX) | Угловой импульс, столкновения | L = r x p; разрешение столкновений тел в симуляции |
Что главное в концепте «Скалярное vs Векторное произведение»?
Проверка усвоения материала концепта.
Практика: 3D-освещение
Практика: 3D-освещение
Вопросы для собеседования
Почему a x a = 0 (нулевой вектор)?
- Угол между a и a равен 0 градусов - |a x a| = |a| * |a| * sin(0) = 0 - Нулевая длина - нулевой вектор - Геометрически: два совпадающих вектора задают «плоскость» нулевой площади - перпендикуляр к ней не определён
Нормаль треугольника смотрит «не туда» - как исправить без пересчёта?
- a x b = -(b x a) - достаточно поменять порядок операндов - Либо умножить результат на -1 - В 3D-движках это winding order: порядок вершин треугольника определяет сторону нормали - Clockwise vs counter-clockwise - настройка в графическом API (glFrontFace в OpenGL)
Как вычислить векторное произведение в 7D? Существует ли оно?
- Векторное произведение существует только в 3D и 7D - математический факт - В 7D оно связано с октонионами - алгеброй с 8 элементами - В ML используется только 3D-версия - В 2D есть «скалярный cross product» = определитель 2x2, даёт число (площадь), но не вектор
Что главное в концепте «Практика: 3D-освещение»?
Проверка усвоения материала концепта.
Что унести из урока
- **a x b** - вектор, перпендикулярный обоим; |a x b| = площадь параллелограмма
- **Только 3D**: формула требует именно трёх компонент
- **Антикоммутативность**: a x b = -(b x a); порядок определяет направление нормали
- **GPU-рендеринг**: нормаль каждого треугольника = cross product двух рёбер
- **Робототехника**: крутящий момент tau = r x F; результат - ось вращения
- **SLAM/NeRF**: right = forward x up строит систему координат камеры
- **numpy.cross(a, b)** - вся операция в одну строку
Куда дальше
Векторное произведение открывает геометрию 3D-пространства
- Прямые и плоскости — Нормаль плоскости строится через векторное произведение рёбер
- Определитель — Формула cross product - это развёртка определителя 3x3
- Матрицы поворота — Три вектора (right, up, forward) собираются в матрицу вращения камеры