Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Координаты и отсечениеюЛекция 5.doc
Скачиваний:
16
Добавлен:
11.04.2015
Размер:
287.74 Кб
Скачать

Пользовательская система координат (пск) отличается от мировой только тем, что мировая координатная система может быть только одна и положение ее фиксировано, она неподвижна.

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

При работе ПСКпользователь может поворачивать ее плоскость (X,Y) и смещать начало координат. Все координаты при этом отсчитываются относительно текущей пользовательской системы координат. Пользовательская система координат по умолчанию совпадает с мировой.

Операции кадрирования и отсечения

Изображения объектов задается в мировой системе координат. Чтобы преобразовать мировую систему координат в соответствующую физическую систему координат дисплейного устройства используется ПГП – небольшой набор независимых от конкретного применения средств формирования двухмерных объектов на экране графического дисплея, а также для взаимодействия между пользователем и прикладной программой.

Чтобы выполнить это преобразование, необходимо знать, какая часть неограниченного мирового пространства должна попасть на экран графического устройства. Заданная часть виртуального пространства, в котором формируется изображение для вывода на графическое устройство, называется окном. Заданная часть пространства для визуализации, на которую отображается окно называют полем вывода. Операция отображения окна на поле вывода называется видовой операцией (преобразованием). Задание окна используется для построения изображения, в котором границы окна совпадают с рамкой экрана, то есть, с полем вывода. Но иногда необходимо выделить лишь часть изображения, то есть выполнить операцию называемую,отсечением.

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

Перемещая окно и задавая его размеры, можно создавать такие кинематографические эффекты, панорамирование, крупный и мелкий план.

Отсечение. Когда изображение задается как множество точек, реализация операции отсечения является тривиальной задачей. Когда изображение формируется из множества отрезков, задача несколько усложняется. При отображении объекта обычно осуществляются операции одновременного преобразования окна и сформированного в нем изображения. Графические примитивы, располагающиеся полностью вне границ поля вывода, не отображаются на экран. В случае, если примитив частично попадает на экран, он отсекается по границе поля вывода. Операция отсечения может осуществляться как до преобразования отображения, так и после него. Целесообразно делать отсечение до отображения, так как это экономит время и ресурсы за счет того, что невидимые линии не подвергаются преобразованиям.

Вслучае, если стороны окна наклонены по отношению к осям мировой

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

На рис. 3.16 иллюстрируется операция отсечения точек, линий последовательности символов для типового прямоугольного окна. Точка А находится внутри окна, и поэтому она изображается внутри поля вывода. ТочкаBнаходится вне окна и поэтому не изображается на видовой поверхности. ОтрезокEFвесь лежит в поле вывода и поэтому изображается полностью; отрезкиGH иIJ по понятным причинам изображаются не полностью (то есть частично отсекаются); отрезкиKL иСD не изображаются совсем. Отсечение символов здесь изображено на уровне отдельных объектов, что вообще говоря не всегда реализуемо. По тому, как выполнено отсечение по границе окна ясно, что точки (отрезка или собственно точки), попадающие на границу окна, считаются граничными (внутренними) и изображаются в поле вывода.

Для того, чтобы точка была видимой, необходимо и достаточно, чтобы выполнялись следующие неравенства:

Xmin X Xmax

Ymin Y Ymax

И если хотя бы одно из этих неравенств не выполняется, то точка в поле вывода не изображается.

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

1. Концевые точки отрезка лежат в поле вывода (отрезок EFрис. 3.16 ), отрезок полностью отображается.

2. Одна точка лежит вне окна вывода, другая вне его (отрезок GH). Подобная ситуация требует выполнения операции отсечения над отрезком.

3. Обе концевые точки отрезка лежат вне границы окна вывода. В этом случае необходимо проверить возможность его пересечения с границами окна: при обнаружении пересечения необходимо выполнить отсечение в противном случае отрезок находится вне окна вывода (отрезок IJподлежит отсечению, аKL лежит вне окна).

Одним из способов решения задачи на отсечение отрезка, который нельзя принять целиком, является нахождение точек пересечения отрезка с каждой из сторон окна, с которыми отрезок пересекается. Если эти точки найдены, то отрезок частичнонаходится в окне, поскольку необходимо определить и отбросить те части прямой, которые находятся вне окна. При таком подходе для каждой пары (сторона - отрезок) необходимо решать систему двух уравнений. Более эффективным решением является параметрическое задание прямых:

X=x1 + t(x2x1)

Y=y1 + t(y2y1).

Для tиз диапазона (0,1) уравнения определяют точкиx, y, находящиеся на ориентированном отрезке, начинающемся в точкеx1, y1 и заканчивающемся в точкеx2, y2.. При этом необходимо решить систему уравнений относительноtсторона и tотрезок. Если найденные значенияtсторона и tотрезок лежат в диапазоне (0,1), то отрезок пересекается с окном.

Поскольку поле вывода имеет форму прямоугольника (квадрата), каждому отрезку прямой принадлежит не более одного видимого участка. Алгоритм выделения видимых участков отрезков, приведенный в работе, разработан Д. Коэном и А. Сазерлендом. В основе алгоритма лежит принцип, согласно которому, каждый отрезок либо полностью лежит в пределах поля вывода, либо его можно разделить так, чтобы одна из его частей была удалена.

Алгоритм отсечения Коэна - Созерленда позволяет быстро выявить отрезки, которые можно отвергнуть или принять целиком; при этом использовать проверку области расположения отрезков. Вычисления точек пересечения необходимо проводить в том случае, если отрезки не попадают ни в один из случаев:

  • большое окно, содержащее большинство примитивов;

  • малое окно и обширное, насыщенное изображение, в котором большинство примитивов лежат вне окна.

В обоих случаях большинство отрезков можно принять или отбросить целиком.

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

Окно

Центральной областью является окно вывод. Для определения принадлежности отрезка или его концов соответствующей подобласти окна вывода, вводится четырех битный код (см. рис. 3.16) .

К

Рис. 3.16 Коды конечных точек

райний правый бит считается первым. В соответствующий бит заносится 1 при выполнении следующих условий:

бит 1 - точка левее окна;

бит 2 - точка правее окна;

бит 3 - точка ниже окна;

бит 4 – точка выше окна.

В противном случае в бит заносится нуль. Отсюда следует, что если коды обоих концов ребер равны нулю, то эти точки лежат внутри окна, и отрезок видимый. Отрезок отбрасывается без вычислений, если оба его конца находятся выше, ниже, левее или правее окна. В этих случаях соответствующие биты в обоих кодах равняются 1, что легко проверяется при помощи операции логического “И”, примененной к кодам концов отрезка. Если результат логического произведения отличен от 0000,то отрезок лежит вне приделов окна. Несколько примеров приведенных в таблице 3.4 для отрезков рис. 3.22 подтверждают сказанное.

Если результат логического произведения побитно равен нулю, то отрезок может оказаться целиком или частично видимым или даже целиком невидимым. Из рис. 3.22 и таб. 3.4 видно, что отрезки IJ и GHявляются именно такими отрезками. Они действительно пересекаются с окном. Таким образом, для определения полной видимости необходимо проверять значения кодов обоих концов отрезков по отдельности.

Таблица 3.4

Отрезок

Коды концов

Результат логического умножения

Примечание

CD

1001

1010

1000

Невидим

EF

0000

0000

0000

Видим

IJ

0100

1010

0000

Частично видим

GH

0000

0010

0000

Частично видим

KL

0100

0110

0100

Невидим

Здесь необходимо сделать замечание следующего порядка. При разработке алгоритма надо помнить следующее: если наклон отрезка бесконечен, то возможно пересечение его только с верхней и нижней сторонами окна; если же наклон равен нулю, то пересечение возможно только с правой и левой сторонами. А если код одного из концов отрезка равен 0000, то этот конец лежит внутри окна, и поэтому отрезок может пересекать только одну из сторон окна.

Для разрешения вопроса о принадлежности окну отрезка, логическое произведение концов которого равно 0000, эффективно использовать алгоритм деления отрезка пополам. Если отрезок нельзя ни принять, ни отбросить целиком, он делится пополам. Общая стратегия состоит в повторении этого процесса (подобно процедуре двоичного поиска) до тех пор, пока один из сегментов исходного отрезка не будет принят целиком (если пересечение существует), а другой целиком отброшен. Для принятия этого решения используются коды Коэна – Созерленда.