Сравнительный анализ алгоритмов удаления невидимых линий и поверхностей, работающих в пространстве изображения
Понятие компьютерной графики, задачи загораживания объектов в сложных трехмерных сценах. Сравнительный анализ алгоритмов удаления невидимых линий, коды областей Коэна-Сазерленда. Блок-схема алгоритма Коэна-Сазерленда и вспомогательной функции Intersec.
Рубрика | Производство и технологии |
Вид | статья |
Язык | русский |
Дата добавления | 31.07.2018 |
Размер файла | 360,5 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Сравнительный анализ алгоритмов удаления невидимых линий и поверхностей, работающих в пространстве изображения
Технические науки
Абрамова О.Ф.
Данная статья посвящена исследованию одной из сложных и актуальных на сегодняшний день задач компьютерной графики - задачи загораживания объектов в сложных трехмерных сценах. Рассмотрены различные типы алгоритмов, приведен их сравнительный анализ. Подробно исследованы алгоритмы удаления невидимых линий и поверхностей Варнока и Коэна-Сазерленда, приведен их сравнительный анализ по выбранным критериям.
В настоящее время практически каждый человек старается окружить себя полезными и красивыми вещами, одной из которых является компьютерная графика (ее можно встретить в печатной литературе, на экране телевизора и рекламном плакате, дизайнерском проекте). С развитием компьютерных технологий компьютерная графика все больше проникает в жизни людей, она используется в науке и образовании, бизнесе, киноиндустрии, а также во всевозможных отраслях промышленности [1]. Но не стоит забывать, что изучение компьютерной графики далеко не легкий процесс [2, 3, 4]. В данной статье мы рассмотрим одну из наиболее сложных задач компьютерной графики - удаление невидимых линий и поверхностей.
В процессе отображения трехмерной сцены на экране может возникнуть такая ситуация, когда часть объектов сцены перекрывает другие объекты. Невидимые наблюдателю части объектов не должны быть отображены на экране, или должны рисоваться особым образом (например, пунктиром). Неправильная отрисовка видимых и невидимых линий может привести к искажению изображения (к его неправильному восприятию). Выход из подобных ситуаций можно найти с помощью алгоритмов удаления линий и поверхностей. Невидимые линии удаляются при отображении сцены в каркасном виде (алгоритм выделяет части ребер объекта, которые заслонены и удаляет их). При отображении объектов с помощью закрашенных поверхностей удаляются их невидимые части. Также определяются видимые и невидимые для наблюдателя части объемов, которые могут быть удалены аналогичным образом [3].
В настоящее время существует множество алгоритмов удаления невидимых линий и поверхностей. Все их можно разделить на три группы:
алгоритмы, работающие в пространстве объекта (например, алгоритм Робертса);
алгоритмы, работающие в пространстве изображения (алгоритм Коэна-Сазерленда, алгоритм с использованием z-буфера, алгоритм Варнока, Алгоритм Вейлера-Азертона и другие);
алгоритмы, работающие попеременно с системами координат как объекта, так и изображения (алгоритм Ньюэла-Ньюэла-Санча).
Проведем сравнительный анализ алгоритмов, работающих в пространстве объекта и в пространстве изображения (табл. 1) [2, 3, 4].
Таблица 1 Сравнительный анализ алгоритмов удаления невидимых линий
|
Алгоритмы, работающие в пространстве объекта |
Алгоритмы, работающие в пространстве изображения |
|
Система координат |
Алгоритмы имеют дело с физической системой координат, в которой описываются данные объекты |
Алгоритмы работают с системой координат экрана, на который визуализируются объекты |
|
Точность |
Высокая точность (точные результаты, которые могут быть ограничены только точностью вычислений) |
На точность вычислений влияет разрешающая способность экрана |
|
Объем вычислений |
растет теоретически, как квадрат числа объектов n2 |
растет теоретически, как nN, где n- количество объектов в сцене,N - число пикселов |
|
Трудоемкость |
меньше |
больше |
|
Эффективность |
менее |
более |
Однако, стоит отметить, что, не смотря достаточно большое количество разнотипных алгоритмов, в решении задачи загораживания существует ряд важных и до сих пор еще не решенных проблем:
не существует универсального алгоритма, который не ограничивался бы определенным классом линий или поверхностей, необходимых для отображения объектов;
практически невозможно выделить наилучший алгоритм, который был бы пригоден для всех типов графических устройств и любых приложений [4, 5].
Поэтому создание единого алгоритма, который смог бы справиться с удалением невидимых линий и поверхностей, является актуальной задачей повышенной сложности, которая не нашла еще своего решения.
В данной статье будет проведен сравнительный анализ двух алгоритмов удаления невидимых линий и поверхностей, работающих в пространстве изображения: алгоритма Коэна-Сазерленда и алгоритма Варнока.
Алгоритм Коэна-Сазерленда
Алгоритм Коэна-Сазерленда позволяет определить часть отрезка, пересекающую выделенную прямоугольную область, определяя таким образом видимость и невидимость отрезков. Суть алгоритма заключается в том, что плоскость разбивается на 9 частей прямыми, образующими стороны прямоугольника (рис. 1). Каждая часть имеет свой 4х-битный код. [6]
Рисунок 1 Коды областей Коэна-Сазерленда
Поле вывода (с учетом границ) состоит из точек (x,y), которые удовлетворяют соотношения xl?x?xr и yb?y?yt . Допустим, что отрезок задан с помощью координат концевых точек (x1,y1) и (x2,y2). В начале алгоритма Коэна-Сазерленда выявляются полностью видимые и невидимые отрезки:
отрезок полностью принадлежит полю вывода, если его концы удовлетворяют условиям (xl?x1?xr ,yb?y1?yt и xl?x2?xr, yb?y2?yt);
отрезок является полностью невидимым, если его оба конца лежат:
справа от ребра r (x1>xr, x2>xr);
слева от ребра l (x1l, x2l);
снизу от ребра b (y1b, y2b);
сверху от ребра t (y1>yt, y2>yt).
В остальных случаях отрезок может (но не обязан) пересекать поле вывода.
В данном алгоритме каждой концевой точке отрезка присваивается свой код, в зависимости от ее расположения относительно поля вывода. Если коды концов отрезков равны нулю, то он (отрезок) лежит в поле вывода (внутри окна). Для анализа остальных случаев необходимо воспользоваться операцией логического умножения кодов [6, 7].
Руководствуясь полученной таблицей истинности, можно утверждать: если произведение концов отрезка принимает значение T (true), то этот отрезок полностью лежит по одну сторону одной из прямых (l, r, t или b), причем, важно отметить, он лежит во внешней стороне относительно поля вывода, следовательно, он полностью невидим. Если же произведение оказалось F(false), то отрезок частично находится в поле вывода [7].
Приведем общую блок-схему алгоритма Коэна-Сазерленда (рис. 2).
Рисунок 2 Блок-схема алгоритма Коэна-Сазерленда
В блок-схеме используются следующие обозначения:
GetCode(r) - вспомогательная функция, определения кода точки;
C1, C2 - коды точек r1, r2;
Intersec(r1,l), Intersec0(r1,l) - вспомогательные функции, поиска пересечения отрезка со сторонами окна при условии, что точка r1 лежит в окне и что обе точки лежат вне окна; если пересечения нет, устанавливает переменную IsVisible в 0, соответственно.
Входными данными являются точки (1), массив координат окна
(2).
На выходе получаем новые концевые точки (3), а также значение переменной IsVisible (0 - отрезок видимый)[4].
Теперь приведем блок-схемы и рассмотрим более подробно вспомогательные функции: Intersec(r1,l) и Intersec0(r1,l) (рис. 3, 4).
Рисунок 3 Блок-схема вспомогательной функции Intersec
компьютерная графика intersec сазерленд
Воспользуемся методом поиска пересечений, использующим параметрическое уравнение прямой, проходящей через точки:
(4),
или в координатном виде:
, , , (5).
Определим точку пересечения отрезка с верхней границей окна, которая описывается соотношениями: (6).
Тогда условие пересечения границы и отрезка имеет вид:
(7).
Аналогично запишутся формулы для оставшихся границ окна. Если точка расположена внутри поля вывода, то, в зависимости от знака ly, необходимо искать пересечение либо с верхней, либо с нижней границей поля вывода (окна). Если такие пересечения отсутствуют, необходимо искать пересечения с двумя другими гранями окна (левой и правой стороной). До того как рассматривать выше описанные варианты, необходимо исключить случаи горизонтальных ly = 0 (пересечение с правой или левой границей: (L,y1), (R,y1), в зависимости от знака lx и вертикальных lx = 0 (пересечение с верхней или нижней границей: (x1,B), (x1,T) направлений отрезка.[7, 8]
Рисунок 4 Блок-схема вспомогательной функции Intersec0
Для случая, когда оба конца отрезка лежат вне окна вывода, в начале найдем одну точку пересечения с границей окна и заменим ею один из концов отрезка, а далее будем использовать вышеописанный алгоритм нахождения второй точки. Важно отметить, что первый шаг не в 100% случаев оканчивается успешно, так как с помощью предварительного анализа невозможно исключить все возможные невидимые отрезки. Аналогично предыдущему алгоритму перед поиском точек пересечения с полем вывода выполняется проверка на вертикальное и горизонтальное направление отрезка. Так как часть отрезков была исключена благодаря предварительному анализу, остаются только две возможные ситуации (рис. 5).
Рисунок 5 Отрезки параллельны сторонам поля вывода
Точки пересечения на рисунке 6 определяются очевидным образом.
Далее последовательно рассматриваются 4 случая расположения точки относительно прямых, которые ограничивают поле вывода. При нахождении точки пересечения в любом из вариантов, процесс анализа останавливается, данная точка заменяется новой точкой и вызывается функция Intersec. Если при переборе всех 4х вариантов положительный ответ не был получен, переменная IsVisible получает значение 0.
Реализация алгоритма Коэна-Сазерленда для трехмерного случая аналогична двумерной реализации, за исключением того, что четырехразрядный код заменяется шестиразрядным (добавляются два бита глубины), следовательно, рассматриваются не прямоугольники, а параллелепипеды.
Алгоритм Варнока
Алгоритм Варнока работает в пространстве изображения. В процессе его работы так же рассматривается окно и определяется пустое ли оно или его содержимое просто для визуализации. Если эти два условия не выполняются, то происходит разбиение окна до тех пор, пока содержимое фрагментов окна не станет достаточно простым для визуализации или их размеры не достигнут пределов разрешения (в этом случае информация усредняется, т.е. выводится на экран с одинаковой интенсивностью или цветом)[9].
Существует множество видов алгоритма Варнока, все они различаются методами разбиения окна и критериями, определяющими является ли изображение в окне простым. Простейшая и оригинальная версия алгоритма Варнока выглядит следующим образом: окно, содержимое которого сложно визуализировать, разбивается на четыре одинаковых фрагмента, так называемых подокна; затем подокно, в котором есть содержимое, разбивается до тех пор, пока не будет достигнут предел разрешения экрана[8, 9].
Такой процесс разбиения можно изобразить в виде дерева. Важно отметить, что именно в алгоритме Варнока впервые была реализована структура данных, названная кватернарным деревом. Корень этого дерева - визуализируемое окно; узла дерева - подокна (они изображаются в виде прямоугольников, которые хранят левую нижнюю координату угла подокна, а также длину его стороны). Подокна обрабатываются последовательно друг за другом слева направо на каждом уровне разбиения дерева. Перебором находится подокно, содержащее сложное изображение, которое необходимо разбить (такое подокно называется активным узлом); и все повторяется на новом уровне. На каждом уровне есть активный узел, слева от активного узла располагаются пустые окна, справа от активного узла располагаются окна, которые будут обработаны позднее, т.е. будут объявлены пустыми или будут разбиты при обратном обходе дерева.
При помощи вышеописанного алгоритма можно удалить как невидимые линии, так и поверхности. Однако минусом данного способа является большое количество разбиений исходного окна, который возникает из-за простоты критерия разбиения и его негибкости. Эффективность повысится, если усложнить критерий и способ разбиения.
Чтобы рассматривать более сложные критерии разбиения окна необходимо сначала определить способы расположения многоугольника относительно окна.
Будем выделять 4 разных многоугольника (рис. 6): внешний (расположен полностью вне окна); внутренний (полностью расположен внутри окна); пересекающий (пересекает хотя бы одну границу окна); охватывающий (окно целиком располагается внутри рассматриваемого прямоугольника) [2, 6].
Рисунок 6 Типы многоугольников: внешний (а), внутренний (b), пересекающий (c), охватывающий (d).
Зная вышеописанные типы многоугольников, можно рассмотреть следующие правила обработки окна. Для каждого окна:
если в сцене присутствуют только внешние многоугольники по отношению к окну, то это окно считается пустым; оно не разбивается и изображается с фоновой интенсивность или цветом;
если в сцене присутствует лишь один многоугольник, который располагается внутри окна, то площадь вне многоугольника изображается с фоновой интенсивностью или цветом, а площадь внутри многоугольника, заполняется соответствующим ему цветом или интенсивностью;
если в сцене располагается пересекающий многоугольник, то площадь вне многоугольника изображается с фоновой интенсивностью или цветом, а площадь внутри многоугольника, которая располагается внутри окна, заполняется соответствующим ему цветом или интенсивностью;
если в сцене присутствует только один многоугольник (охватывающий), то окно изображается с интенсивностью или цветом соответствующими охватывающему многоугольнику;
если в сцене присутствует хотя бы один охватывающий многоугольник, расположенный ближе других к точке наблюдения, то окно заполняется интенсивностью или цветом, соответствующими охватывающему многоугольнику.
В любом другом случае необходимо провести разбиение окна [1,6].
Последний пункт для обработки окна решает задачу удалений невидимых поверхностей. Получается, что многоугольник, расположенный ближе всего к наблюдателю (к точке наблюдения) перекрывает любые другие многоугольники. Остальные пункты для обработки окна позволяют сократить число подразбиений окна, так как в них рассматриваются ситуации пересечения окна и только одного многоугольника.
Для реализации данного алгоритма необходимо определить взаимное расположение многоугольника и окна с помощью функций, которые просты в реализации, если рассматриваются прямоугольные окна и выпуклые многоугольники, а в случае невыпуклых многоугольников задача становится сложнее.
Для сравнительного анализа выбранных алгоритмов были выделены следующие критерии: основная идея алгоритма, пространство в котором он работает, наличие возможности удаления невидимых линий и поверхностей, количество итераций, критерий завершения, эффективность для сложных сцен, способы повышения эффективности алгоритма, частота использования, сложность реализации и точность. Для наглядности результаты анализа были сведены в таблицу 2.
Таблица 2 Сравнительный анализ алгоритмов Коэна-Сазерленда и Варнока
|
Алгоритм Коэна-Сазерленда |
Алгоритм Варнока |
|
Основная идея |
Чтобы определить, как отрезок расположен относительно окна вывода, необходимо проверить коды концов отрезка и в зависимости от их значения сделать выводы. |
Чтобы проанализировать является ли элемент изображения видимым или невидимым в окне вывода, необходимо осуществить последовательное разбиение объектного пространства на составные части. |
|
Пространство, в котором работает алгоритм |
Работает в пространстве изображения |
Работает в пространстве изображения |
|
Возможность удаления невидимых линий |
есть |
есть |
|
Возможность удаления невидимых поверхностей |
нет |
есть |
|
Количество итераций |
выполняет отсечение за несколько итераций (около 2х) |
прямо пропорционально насыщенности изображения |
|
Критерий завершения |
Отсечение отрезков продолжается до тех пор, пока длина очередного отрезка не станет меньше наперед заданной точности. |
Разбиение области стоит прекратить, как только ее размер станет не больше одного пикселя. |
|
Эффективность для сложных сцен |
Низкая |
Средняя |
|
Повышение эффективности алгоритма |
расположение объектов: эффективность алгоритма Коэна-Сазерленда повышается, если большая часть примитивов полностью находится в большом окне, или большинство примитивов лежит вне малого окна. |
предварительная сортировка граней объектов, находящихся в сцене, по их расстоянию от наблюдателя. повышение эффективности разбиений (например, с использованием прямоугольной объемлющей оболочки многоугольника). |
|
Частота использования |
более |
менее |
|
Сложность реализации |
средняя |
легкая в случае прямоугольных окон и выпуклых многоугольников; усложняется, если многоугольники невыпуклые |
|
Точность |
ограничена разрешающей способностью экрана |
На практике, сравнительный анализ алгоритма Коэна-Сазерленда и алгоритм Варнока (а также любых других алгоритмов удаления невидимых линий и поверхностей) крайне затруднителен. Так как в различных случаях при работе с различными моделями пространства будут эффективны различные алгоритмы. Даже при работе с одной и той же моделью в зависимости от точки расположения наблюдателя могут быть эффективны различные алгоритмы удаления невидимых линий и поверхностей.
Список литературы
1. Абрамова О.Ф., Котов В. В. К вопросу об импорте 3D моделей в программы с использованием графической библиотеки OpenGL [Электронный ресурс] / Котов В. В., Абрамова О.Ф. // Современная техника и технологии. - 2014. - № 1. - C. Режим доступа : http://technology.snauka.ru/2014/01/2965.
2. Трифанов А.И., Абрамова О.Ф. Реализация собственного метода визуализации водной поверхности «скользящая текстура» / Трифанов А.И., Абрамова О.Ф. // Современные наукоёмкие технологии. - 2013. - № 8 (ч. 1). - C. 96-97.
3. Абрамова О.Ф. Использование мультимедийных технологий в процессе обучения дисциплине "Компьютерная графика" / Абрамова О.Ф., Белова С.В. // Успехи современного естествознания. - 2012. - № 3. - C. 90.
4. Абрамова О.Ф. К вопросу о повышении эффективности функционирования тренажёрно-обучающих систем / О.Ф. Абрамова, М.Л. Цыганкова // Открытое и дистанционное образование. - 2014. - № 4. - C. 34-39.
5. cb.mediaedu.uz - Медиаобразовательный портал - [Электронный ресурс] - Режим доступа : http://cb.mediaedu.uz/cabinet.php?page=courses&urok=90
6. technomag.edu.ru - Электронное издательство НАУКА и ОБРАЗОВАНИЕ - Издатель ФГБОУ ВПО «МГТУ им. Н.Э. Баумана». Эл № ФС 77 - 48211 - [Электронный ресурс] - Режим доступа : http://technomag.edu.ru/doc/49094.html
7. Шикин Е. В., Боресков А. В. Компьютерная графика. Полигональные модели. -- М.: ДИАЛОГ-МИФИ, 2001.
8. Шлыков А.А. Практическая реализация алгоритма поиска кратчайшего пути А* для трёхмерных моделей зданий / А.А. Шлыков, О.Ф. Абрамова // Современные наукоёмкие технологии. - 2014. - № 5 (ч. 2). - C. 17-18.
9. Сиденко Л.А. Компьютерная графика и геометрическое моделирование: Учебное пособие. - СПб.: Питер, 2009. - 224 с.: ил. - (Серия «Учебное пособие»)
Размещено на Allbest.ru
...Подобные документы
Технология возделывания картофеля. Основные направления в осуществлении операции удаления ботвы при машинной уборке картофеля, агротехнические требования. Рабочие органы предварительного удаления ботвы. Разработка кинематической схемы роторной машины.
курсовая работа [4,0 M], добавлен 05.01.2012Структура и общее состояние мясоперерабатывающих предприятий. Оборудование для оглушения животных, для обескровливания и сбора крови, для съемки шкур, для мойки удаления щетины, для разделки туш. Технологический расчет оборудования линий убоя скота.
контрольная работа [977,6 K], добавлен 13.04.2014Определение конструкции и размеров основных рабочих органов машины: дисковых ножей механизма удаления хвостовых плавников и отсекания головы. Подбор электродвигатели для: привода насоса, механизма удаления внутренностей. Узлы посадки и крепления ножей.
курсовая работа [1,5 M], добавлен 22.04.2014Применение аэрируемых песколовок для удаления из сточных вод песка. Расчет песковых площадок и бункеров. Гидравлический расчет трубопроводов. Материальный баланс, выбор конструкционного материала. Подбор устройства для удаления осадка из песколовки.
реферат [201,5 K], добавлен 16.06.2012Построение математической модели измерительной системы. Метод синтеза алгоритмов обработки измерительной информации о многокомпонентных перемещениях и деформациях подвижного объекта. Постановка и реализация задачи, анализ полученных результатов.
курсовая работа [1,2 M], добавлен 06.04.2015Автоматизация производства – это процесс, при котором функции управления и контроля, ранее выполнявшиеся человеком, передаются приборам и автоматическим устройствам. Разновидностью комплексных автоматических линий являются роторные автоматические линии.
реферат [37,6 K], добавлен 06.12.2008Техническая характеристика перевалочного устройства. Расчет калибровки валков для прокатки двутавровой балки в универсальной и вспомогательной клетях. Рольганги рабочих линий промежуточной, предчистовой и чистовой групп. Дефекты проката двутавров.
дипломная работа [655,4 K], добавлен 23.10.2014Технология механической, влажной и пневматической уборки пыли. Аллергенные свойства пыли. История появления и тенденции развития пылесосов. Принцип работы пылесосов. Центральная система пылеудаления, пневмовыхлоп, внутренние воздуховоды, пневморозетка.
реферат [28,7 K], добавлен 10.02.2010Изучение требований к прокладке кабельных линий. Структура системы видеонаблюдения. Характеристики установленных внутренних видеокамер. Обеспечение защиты линий электропитания аппаратуры в помещениях. Порядок проведения работ по техническому обслуживанию.
контрольная работа [40,6 K], добавлен 20.05.2015Анализ путей автоматизации стана ХПТ-55. Декомпозиционный анализ задачи модернизации системы управления и разработка декомпозиционной схемы. Разработка схемы электрической соединений системы управления. Разработка блок-схемы алгоритма управления станом.
дипломная работа [1,6 M], добавлен 24.03.2013Модули трехмерного проектирования, появившиеся в КОМПАС 3D-V8. Штамповочные детали в листовых элементах. Характерные точки трехмерных объектов. Изменение изображения модели на экране при смене ориентации, масштаба. Автоматическая система ориентации
книга [3,4 M], добавлен 12.02.2009Изучение устройства системы смазки двигателя, предназначенной для подачи масла к трущимся поверхностям с целью уменьшения трения, охлаждения поверхностей и удаления продуктов изнашивания из зон трения. Отказы системы смазки, техническое обслуживание.
курсовая работа [1,3 M], добавлен 18.03.2010Отличительные признаки уровней автоматизации, развитие автоматизации в направлении технологической гибкости и применения ЭВМ. Области применения линий циклического и непрерывного действия. Устройства, обеспечивающие гибкую связь между участками линий.
реферат [6,4 M], добавлен 02.11.2010Анализ подходов к технологическому процессу выпаривания нитрата натрия. Разработка технологического процесса и составление функциональной схемы автоматизации. Разработка блок-схемы алгоритмов работы объекта. Расчет САР, определение передаточных функций.
курсовая работа [648,1 K], добавлен 20.07.2012Расчет параметров режимов резания при сверлении отверстия в заготовке и при шлифовании вала на круглошлифовальном станке. Сравнительный анализ эффективности обработки плоских поверхностей с заданной точностью при процессах строгания и фрезерования.
контрольная работа [392,7 K], добавлен 19.11.2014Виды и формы поточных линий на предприятии. Показатели оценки поточных линий. Повышение точности заготовок и материалов. Оценка срока окупаемости реализации проекта. Принцип прямоточности, специализации, непрерывности и параллельности производства.
курсовая работа [129,4 K], добавлен 27.09.2011Операции конструктивного моделирования, трансформация линий деталей одежды. Общие сведения о покрое одежды, сохранение гармоничности композиции модели и пластичности линий в местах сопряжений, изменение признаков формы при сохранении ее общих пропорций.
контрольная работа [10,6 M], добавлен 18.08.2010Конструкторский анализ электрической схемы. Анализ элементной базы по условиям эксплуатации. Разукрупнение схемы изделия. Блок зарядного устройства: наименование, назначение и область применения изделия, основание, источник, цели и задачи для разработки.
курсовая работа [276,0 K], добавлен 20.07.2012Описание конструкции прихватов приспособлений-спутников автоматических линий. Силовой и точностной расчёт приспособления. Определение силы зажима для надежного закрепления. Погрешность базирования при несовмещении установочной и измерительной баз.
курсовая работа [2,1 M], добавлен 23.07.2015Свойства лазерного луча: направленность, монохроматичность и когерентность. Технология лазерной резки металла. Применение вспомогательного газа для удаления продуктов разрушения металла. Типы лазеров. Схема твердотельного лазера. Резка алюминия и сплавов.
лабораторная работа [2,1 M], добавлен 12.06.2013