Геометрия

Векторная геометрия

Алгоритм Мёллера-Трумбора используется в каждом трассировщике лучей-от Blender Cycles до NVIDIA OptiX. Понимание dot и cross products-обязательное требование для позиций 3D graphics engineer.

  • **Backface culling:** dot(face_normal, view_dir) > 0-отсекаем 50% треугольников сцены
  • **Физические движки:** torque = r × F, угловой момент L = r × p
  • **Barycentric координаты:** интерполяция UV, нормалей, цветов в растеризаторе
  • **Ray tracing:** алгоритм Мёллера-Трумбора-стандарт de facto для ray-triangle intersection

Предварительные знания

  • Solids of Revolution

Скалярное произведение

Скалярное произведение двух векторов-число, равное сумме произведений соответствующих компонент. Его геометрический смысл: проекция одного вектора на другой, умноженная на длину второго.

**Определение:** a·b = aₓbₓ + aᵧbᵧ + a_z·b_z = |a|·|b|·cos θ **Применения:** - cos θ = (a·b)/(|a||b|)-угол между векторами - Проекция a на b: proj = (a·b)/|b| - Backface culling: если n·(view_dir) > 0-грань отвёрнута от камеры - Barycentric координаты через dot products

Скалярное произведение a·b = 0. Что можно сказать о векторах a и b?

Векторное произведение

Векторное произведение a×b-вектор, перпендикулярный обоим множителям. Его длина равна площади параллелограмма, построенного на a и b.

**Компонентная формула:** a×b = (aᵧb_z − a_zbᵧ, a_zbₓ − aₓb_z, aₓbᵧ − aᵧbₓ) **Свойства:** - |a×b| = |a|·|b|·sin θ-площадь параллелограмма - Правило правой руки: направление по пальцам a→b - a×b = −(b×a)-антикоммутативность - Площадь треугольника = |a×b|/2

Площадь треугольника с вершинами A(0,0,0), B(2,0,0), C(0,3,0) через векторное произведение:

Тройное произведение

Тройное скалярное произведение (смешанное произведение) трёх векторов равно объёму параллелепипеда на них построенного. Его знак определяет ориентацию тройки.

**Тройное скалярное произведение:** [a, b, c] = a·(b×c) = det([a, b, c]) Geo смысл: ±объём параллелепипеда на векторах a, b, c. **Применения:** - Тест ориентации: [a,b,c] > 0 → правая тройка, < 0 → левая - Объём тетраэдра = |[a,b,c]|/6 - Барицентрические координаты через соотношение объёмов

Тройное произведение [a, b, c] = 0. Что это означает?

Алгоритм Мёллера-Трумбора

Алгоритм Мёллера-Трумбора-стандарт для пересечения луча с треугольником в рейтрейсинге. Использует барицентрические координаты и тройные произведения.

**Идея:** луч O+tD пересекает треугольник ABC, если: - t > 0 (впереди) - u, v ≥ 0 и u+v ≤ 1 (внутри треугольника) Решаем систему: O + tD = A + u(B−A) + v(C−A) **Скорость:** ~6 dot products + 1 cross product-без вычисления нормали.

В алгоритме Мёллера-Трумбора: если a ≈ 0, что это означает?

Ключевые идеи

  • **Dot product:** a·b = |a||b|cosθ-проекция, угол, backface test
  • **Cross product:** a×b-нормаль к треугольнику, площадь, torque; |a×b| = |a||b|sinθ
  • **Triple product:** [a,b,c] = det-объём параллелепипеда, ориентация тройки
  • **Мёллер-Трумбор:** ray-triangle intersection через барицентрические координаты за O(1)

Связанные темы

Векторная геометрия-язык компьютерной графики и физики:

  • Пространственная геометрия — Нормаль плоскости = cross product двух сторон
  • Проективная геометрия — Homogeneous coords-векторное пространство над проективной плоскостью
  • Геометрия в CS — CCW test = знак cross product = ориентация

Вопросы для размышления

  • Как использовать dot product для быстрой проверки, находится ли точка в конусе зрения (frustum cull)?
  • Почему cross product не определён в 2D? Что используют вместо него для ориентационного теста?
  • Как барицентрические координаты через cross products позволяют интерполировать текстурные UV на треугольнике?

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

  • la-01-vectors-intro
Векторная геометрия

0

1

Войти