Линейная алгебра

Векторное произведение: перпендикуляр из двух векторов

Нормаль к поверхности в 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·aa 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) собираются в матрицу вращения камеры

Связанные уроки

  • calc-19-gradient
Векторное произведение: перпендикуляр из двух векторов

0

1

Войти