Геометрия
Векторная геометрия
Алгоритм Мёллера-Трумбора используется в каждом трассировщике лучей-от 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
Предварительные знания
Скалярное произведение
Скалярное произведение двух векторов-число, равное сумме произведений соответствующих компонент. Его геометрический смысл: проекция одного вектора на другой, умноженная на длину второго.
**Определение:** 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 на треугольнике?