Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ампилов версия 0.40.docx
Скачиваний:
10
Добавлен:
05.08.2019
Размер:
103.34 Кб
Скачать

18.Видовая операция. Управление сегментами.

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

Сегментные преобразования – матрица вещественных чисел 2х3, задающая преобразование координат при выводе содержимого сегмента на экран.

Сегменты – это логически связанные последовательности примитивов, рассматриваемые как единое целое.

Материал:

http://ru.wikipedia.org/wiki/GKS

лекции Ампилова В.И.

19.Видовая операция. Алгоритм Коэна-Сазерленда. (случай « вне-внутри»).

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

x0x1 – клетка находится слева от центральной области и обозначается 11.

_x0x1 – справа – 01

y0y1 – ниже – 11

_y0y1 – выше – 01

А всё что с центром 00.

Схема алгоритма:

1.Рассчитать коды конечных точек отсекаемого отрезка.

2.Если логическое И кодов конечных точек не равно 0, то отрезок целиком вне окна. Он отбрасывается и отсечение закончено.

3.Если оба кода равны 0, то отрезок целиком видим. Он принимается и отсечение закончено.

4.Если начальная точка внутри окна, то она меняется местами с конечной точкой.

5.Анализируется код начальной точки для определения стороны окна с которой есть пересечение и выполняется расчет пересечения. При этом вычисленная точка пересечения заменяет начальную точку.

6.Определение нового кода начальной точки.

«вне-внутри»

Если p1=0 («вне») проверяется p2,

Если p2=0, то часть отрезка «вне», а другая «внутри».

Ищется пересечение прямой с границами центральной области.

Проверкой двух последних разрядов определяется куда направлен вектор:

Если вектор направлен вверх, то проверяется x-нулевой разряд, то применяется Xmin, если 0, то Xmax.

Получается мы нашли границу окна, а эта пара даёт нам точку пересечения.

Далее примитив распадается на два, каждый из которых проверяется на принадлежность центральной области.

Материал:

http://algolist.manual.ru/graphics/clip_seg.php

лекции Ампилова В.И.

20.Видовая операция. Алгоритм Коэна-Сазерленда. (случай «вне-вне»)

«вне-вне»

Если p1=0 («вне») и p2=1 («вне»), отрезок может полностью лежать вне центральной области, а может частично в неё попадать.

Если отрезок частично попадает в центральную область, сначала выполняется проверка (p3).

Если p3=1, то весь отрезок находится за границами центральной области.

Если p3=0, то отрезок может частично лежать внутри центральной области и может полностью находиться вне её.

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

P4=x0iUx0j

P5=y0iUy0j

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

Материал:

Лекции Ампилова В.И.