Преобразования систем координат

Преобразования систем координат в CesiumJS опираются на строгую математическую модель представления пространства, основанную на геоцентрических и локальных системах отсчёта. В основе лежит связка географических координат (широта, долгота, высота), декартовых координат в мировой системе и локальных систем ориентации, применяемых для объектов сцены, камер и 3D-моделей.

Географическая система координат в CesiumJS представлена через структуру Cartographic:

  • долгота (longitude)
  • широта (latitude)
  • высота (height)

Эта система описывает положение точки на поверхности эллипсоида WGS84, однако не используется напрямую для расчётов в сцене.

Для вычислений применяется геоцентрическая система Earth-Centered, Earth-Fixed (ECEF), в которой начало координат находится в центре Земли, ось X направлена к пересечению экватора и нулевого меридиана, ось Y — к 90° восточной долготы, ось Z — к северному полюсу.

Преобразование между системами выполняется через:

  • Cartesian3.fromDegrees(longitude, latitude, height)
  • Cartographic.fromCartesian(cartesian)

Внутри CesiumJS эти операции учитывают параметры эллипсоида и обеспечивают точную геодезическую конверсию.

Декартова система координат (Cartesian3)

Тип Cartesian3 представляет точки в трёхмерном пространстве ECEF. Все глобальные расчёты сцены — позиционирование камер, моделей, лучей — выполняются именно в этой системе.

Основные операции:

  • сложение и вычитание векторов
  • нормализация
  • скалярное произведение
  • вычисление расстояний

Пример базового преобразования:

  • географическая точка → Cartesian3
  • Cartesian3 → позиция в сцене

Вся визуализация CesiumJS строится вокруг этой модели, так как она исключает неоднозначности, связанные с кривизной Земли.

Локальные системы координат

Для работы с объектами вблизи поверхности Земли используются локальные системы отсчёта. Наиболее распространённая — East-North-Up (ENU), где:

  • ось X направлена на восток
  • ось Y направлена на север
  • ось Z направлена вверх, перпендикулярно поверхности

Создание матрицы локального преобразования выполняется через:

  • Cesium.Transforms.eastNorthUpToFixedFrame(position)

Эта функция строит матрицу 4×4, преобразующую локальные координаты объекта в мировые ECEF-координаты.

Локальные системы применяются для:

  • ориентации 3D-моделей относительно поверхности
  • построения пользовательских осей объектов
  • расчёта направлений движения в пространстве

Матрицы преобразований

В CesiumJS основным инструментом трансформации выступают матрицы Matrix4 и Matrix3.

Matrix4 используется для:

  • позиционирования объектов
  • объединения поворота, масштаба и переноса
  • перехода между системами координат

Общая структура:

  • 3×3 подматрица — вращение и масштаб
  • четвёртый столбец — трансляция

Типичная цепочка преобразований включает:

  • локальную матрицу модели
  • матрицу глобального положения
  • итоговую модельную матрицу сцены

Ориентация объектов: Heading, Pitch, Roll

Для задания ориентации используется система углов:

  • Heading — поворот вокруг оси Z (вертикаль)
  • Pitch — наклон вверх/вниз
  • Roll — крен

Преобразование углов в матрицу выполняется через:

  • Cesium.Transforms.headingPitchRollToFixedFrame

Эта функция строит матрицу, которая объединяет:

  • позицию в ECEF
  • ориентацию в локальной системе ENU

Далее результат применяется как modelMatrix для 3D-объектов.

Связь локальных и глобальных систем

Преобразование между локальной системой объекта и глобальной системой Земли осуществляется через цепочку матричных операций:

  • локальная модельная система (object space)
  • система ориентации (ENU)
  • глобальная система (ECEF)

Комбинированная модель:

  • локальная матрица объекта умножается на матрицу геопривязки
  • результат преобразуется в мировые координаты сцены

Такая архитектура позволяет размещать объекты на эллипсоиде без потери точности при больших масштабах.

Преобразования камер

Камера в CesiumJS также оперирует в мировых координатах ECEF, но её ориентация задаётся дополнительными матрицами поворота.

Основные элементы:

  • позиция камеры (Cartesian3)
  • направление взгляда
  • вектор вверх

Матрица камеры формируется как обратная модельной трансформации сцены. Это позволяет корректно отображать глубину и перспективу при любом положении наблюдателя.

Quaternion и непрерывная интерполяция ориентации

Для представления вращений используется кватернионная алгебра. Кватернионы применяются вместо углов Эйлера для предотвращения эффекта gimbal lock.

Основные операции:

  • создание из матрицы поворота
  • интерполяция между ориентациями (slerp)
  • нормализация вращений

Кватернионы тесно связаны с Matrix3, где матрица может быть преобразована в quaternion и обратно для вычислений ориентации.

Преобразование моделей и modelMatrix

Каждый объект сцены имеет modelMatrix, который определяет его положение и ориентацию в мире.

Формирование включает:

  • локальное смещение модели
  • масштабирование
  • поворот
  • привязку к поверхности Земли

Типичный процесс:

  • вычисление позиции в ECEF
  • создание ENU-матрицы
  • применение heading/pitch/roll
  • объединение в итоговую Matrix4

Геодезические преобразования и эллипсоид

Все координатные преобразования опираются на эллипсоид WGS84. Его параметры определяют:

  • радиус экватора
  • сжатие по полюсам
  • кривизну поверхности

Это критично при:

  • вычислении высот
  • построении точек на поверхности
  • интерполяции траекторий

CesiumJS выполняет все преобразования с учётом геодезической модели, а не плоской проекции.

Преобразования направлений и векторов

Помимо координат точек, преобразуются также направления:

  • нормали поверхности
  • касательные векторы
  • векторы скорости

Для этого используются:

  • Cesium.Matrix3.multiplyByVector
  • Cesium.Cartesian3.normalize
  • Cesium.Cartesian3.cross

Такие операции обеспечивают корректную ориентацию объектов относительно кривизны Земли.

Иерархия систем координат в сцене

Внутренняя структура преобразований строится как многоуровневая система:

  • геодезическая система (Cartographic)
  • геоцентрическая система (ECEF)
  • локальная система (ENU)
  • объектная система (Model Space)
  • экранная система (Viewport)

Каждый уровень связан матричным преобразованием, а вся сцена представляет собой композицию этих преобразований, обеспечивающую стабильную работу при глобальных масштабах.