£?о = Л>+ V,-»- 2у2+ Зу3, а матрица М7 примет вид
1111
Обратная матрица имеет вид А=(МГ)~' =
-1 1 0
о о -1 1
о
-3 1
Эти матрицы позволяют преобразовывать представления в разных фреймах в обе стороны. Обратите внимание на то, что матрица А преобразует точку, имеющую в исходном фрейме представление (1, 2, 3) или в однородных координатах представление Г
Р =
в начало координат нового фрейма: "0" Р' =
Но вектор (1,2, 3), который имел в однородных координатах исходного фрейма представление Г 2 3 0
4.3. Системы координат и фреймы
преобразуется в новом фрейме в Этот результат полностью согласуется с тем, который мы получили в примере с изменением систем координат. Он также демонстрирует, как важно отличать точки от векторов при выполнении операций.
4.3.5. Фреймы и абстрактные типы данных
До сих пор мы рассматривали сугубо математические вопросы представления геометрических объектов. Теперь наступила пора "спуститься на грешную землю" и задуматься над тем, как вся эта математика может быть реализована в компьютерной программе. Начнем с понятия об абстрактных типах данных.
В предыдущих разделах мы рассмотрели несколько типов геометрических объектов, в частности точки, прямые и плоскости, исполняющих в графических системах роль примитивов - "кирпичиков", из которых строятся другие объекты. Поэтому желательно, чтобы графическая система позволяла включить в программу определение переменных в таком, например, виде:
point3 p,q; vector3 v,u;
а затем разрабатывать программу в терминах этих типов данных. В языках программирования, подобных С++, которые поддерживают переопределение (перегрузку) операторов, можно использовать такие выражения:
q=p+v; u=p-q;
Но включение в программу выражений
q=v; u=p+q;
приведет к появлению сообщения об ошибке. Приведенные выше типы можно реализовать в программе разными способами. В С++ и других объектно-ориентированных языках программирования можно использовать такие средства, как конструкторы, деструкторы и перегрузку операторов, что позволяет скрыть детали реализации от прикладного программиста. Те же, кто работает на языке С, могут определить в программе тип данных point3 следующим образом: