Геометрия

Пространственная геометрия

Frustum culling, ray-plane intersection, backface culling-без знания уравнений плоскостей в 3D невозможно написать ни один производительный 3D движок. Unity и Unreal делают тысячи таких проверок каждый кадр.

  • **Frustum culling:** 6 plane-AABB тестов для каждого объекта в сцене
  • **Рейтрейсинг:** ray-plane пересечение-основа трассировки лучей
  • **Robotics:** уравнения плоскостей описывают рабочее пространство манипулятора
  • **Point cloud processing:** RANSAC plane fitting для выделения поверхностей из LiDAR

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

  • Geometric Transformations

Плоскости в 3D

Плоскость в 3D определяется нормальным вектором и одной точкой. Уравнение плоскости-обобщение уравнения прямой в 2D.

**Уравнение плоскости:** ax + by + cz + d = 0 где n = (a, b, c)-нормальный вектор (перпендикуляр к плоскости). **Через точку P₀ и нормаль n:** n·(P − P₀) = 0 **Через три точки:** n = (B−A) × (C−A), d = −n·A

Нормальный вектор плоскости 2x − 3y + z − 5 = 0 равен:

Расстояние от точки до плоскости

Расстояние от точки до плоскости-прямое обобщение расстояния от точки до прямой в 2D. Знаковое расстояние показывает, с какой стороны плоскости находится точка.

**Расстояние от точки (x₀, y₀, z₀) до плоскости ax+by+cz+d=0:** dist = |ax₀+by₀+cz₀+d| / √(a²+b²+c²) **Знаковое расстояние:** signed_dist = (ax₀+by₀+cz₀+d) / |n| Положительное-по стороне нормали, отрицательное-против.

Frustum culling в 3D движках: для каждого объекта проверяем его AABB против 6 плоскостей frustum. Каждая проверка-знаковое расстояние.

Расстояние от точки (1, 2, 3) до плоскости x + 2y + 2z − 9 = 0 равно:

Пересечение прямой и плоскости

Пересечение луча с плоскостью-основная операция рейтрейсинга и frustum culling. Параметрическая запись луча позволяет получить точку пересечения напрямую.

**Луч:** P(t) = O + t·D (O-начало, D-направление) **Пересечение с плоскостью n·P + d = 0:** t = −(n·O + d) / (n·D) Если n·D ≈ 0-луч параллелен плоскости (нет пересечения или луч в плоскости).

Луч O=(0,0,0), D=(0,0,1) пересекает плоскость z=5 (нормаль (0,0,1), d=−5). При каком t?

Двугранные углы и направляющие косинусы

Двугранный угол между двумя плоскостями равен углу между их нормалями (или дополнению до 180°). Направляющие косинусы задают ориентацию прямой в пространстве.

**Угол между плоскостями n₁·x+d₁=0 и n₂·x+d₂=0:** cos α = |n₁·n₂| / (|n₁|·|n₂|) **Направляющие косинусы** прямой с вектором (l, m, n): cos α = l/r, cos β = m/r, cos γ = n/r, где r = √(l²+m²+n²) cos²α + cos²β + cos²γ = 1

Угол между плоскостями с нормалями n₁=(1,0,0) и n₂=(0,1,0) равен:

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

  • **Плоскость** ax+by+cz+d=0: нормаль n=(a,b,c) перпендикулярна плоскости
  • **Расстояние** от точки = |n·P+d|/|n|-знак определяет сторону плоскости
  • **Ray-plane:** t = −(n·O+d)/(n·D)-основа рейтрейсинга
  • **Двугранный угол** = arccos(|n₁·n₂|/(|n₁||n₂|))-угол между плоскостями

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

3D плоскости-основа для многогранников и всей компьютерной графики:

  • Многогранники — Грань многогранника-ограниченная часть плоскости
  • Векторная геометрия — Нормаль плоскости = векторное произведение двух сторон
  • Проективная геометрия — Матрица камеры проецирует 3D точки на плоскость изображения

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

  • Как определить, лежат ли 4 точки в пространстве в одной плоскости?
  • Что означает знаковое расстояние в контексте backface culling?
  • Как быстро найти пересечение трёх плоскостей (вершину тетраэдра)?

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

  • la-03-cross-product
Пространственная геометрия

0

1

Войти