Изобразить основные типы проекций. Подобрать соответствующие матрицы преобразований. На фотографиях, картинах, экране изображения кажутся нам естественными и правильными. Эти изображения называют перспективными. Свойства их таковы, что более удаленные предметы изображаются в меньших масштабах, параллельные прямые в общем случае не параллельны. В итоге геометрия изображения оказывается достаточно сложной, и по готовому изображению сложно определить размер тех или иных частей объекта. Обычная перспективная проекция — это центральная проекция на плоскость прямыми лучами, проходящими через точку — центр проецирования. Один из проецирующих лучей перпендикулярен к плоскости проецирования и называется главным. Точка пересечения этого луча и плоскости проекции — главная точка картины. Матрица общего перспективного преобразования: В этой матрице элементы a, d, е отвечают за масштабирование, m, n, L — за смещение, p, q, r — за проецирование, s — за комплексное масштабирование, х — за вращение. Например, матрица для одноточечного проецирования на плоскость z = 0 будет выглядеть так: Именно таким образом получена первая матрица для моей программы: 1 0 0 0 Для того, чтобы применить преобразование, задаваемое такой матрицей, координату каждой вершины (x,y,z) надо превратить в вектор {x, y, z, 1} и умножить на матрицу. Если 4-я координата полученного вектора не равна 1, следует все координаты вектора разделить на значение 4-й координаты. На экран выводим точку, задаваемую первыми двумя координатами такого вектора (x,y). Матрицы аксонометрических изометрической и диметрической проекций выглядят несколько сложнее, т. к. для этих преобразований требуется некоторое вращение фигуры. -0.93 -0.13 0.35 0 Для того, чтобы применить одновременно разные виды преобразований, надо перемножить соответствующие им матрицы. Например, для того, чтобы фигуру, подвергшуюся одноточечной проекции, рассмотреть в виде диметрической проекции (т.е., по существу, повернуть изображение), надо умножить матрицу одноточечной проекции на матрицу диметрической. Программа получает входные данные из двух файлов: matrix.txt, где заданы матрицы преобразований, и in.txt, в котором задаётся нужная пространственная фигура. Файл in.txt, в котором по умолчанию задан куб, заполняется в соответствии с общими правилами – задаётся число вершин фигуры, координаты вершин, число граней, для каждой грани задано число вершин на грани и сами вершины по порядку, против часовой стрелки. Нумерация вершин соответствует порядку, в котором были описаны их координаты. Матрицы перспективных преобразований заслуживают более пристального внимания: в файле matrix.txt заданы 3 матрицы для параллельных проекций и 3 – для перспективных. Первая матрица задаёт перспективную одноточечную проекцию, где точка схода лежит на оси Z. Вторая – двухточечную проекцию, где точки схода лежат на осях X и Y. Третья – трёхточечную проекцию, соответственно, точки схода лежат на всех трёх осях координат. Четвёртая матрица не производит никаких преобразований координат. Пятая отвечает за параллельную изометрическую проекцию, а шестая – за диметрическую. Коэффициенты подобраны таким образом, чтобы минимизировать искажение какого-либо изображения. Чтобы применить то или иное преобразование, координату каждой вершины (x,y,z) надо превратить в вектор {x, y, z, 1} и умножить на соответствующую матрицу. Для эффекта одновременного применения перспективного и параллельного преобразования соответствующие им матрицы предварительно перемножаются. Матрица текущего преобразования хранится в Если вы хотите увидеть непосредственно работу программы – поместите в одну папку файлы Projection.exe, in.txt, matrix.txt и запустите Projection.exe.
Ключевые слова:
проективное преобразование, аксонометрическая, диметрическая, изометрическая, перспективная, параллельная проекция
|
|||||||