ОСНОВНОЙ ПРИНЦИП ПОСТРОЕНИЯ ГРАФИЧЕСКИХ ОБЪЕКТОВ Смирнова М.В.

Мурманский арктический государственный университет


Номер: 2-2
Год: 2016
Страницы: 93-97
Журнал: Актуальные проблемы гуманитарных и естественных наук

Ключевые слова

векторная графика, функциональное программирование, С++, vector graphics, functional programming, C++

Просмотр статьи

⛔️ (обновите страницу, если статья не отобразилась)

Аннотация к статье

В статье рассматривается основной принцип построения графических объектов и векторная графика.

Текст научной статьи

Этот принцип основывается на том, что изначально структуру изображения составляет именно векторное очертание. Это в равной степени относится как к 2D, так и к 3D изображениям. То есть, не возникает совершенно никаких проблем при необходимости вывести на распечатке маленькое или большое по разрешению изображение. Растровое изображение этим похвастать не может. Хорошо, когда у Вас растр достаточно емкий. Но если это мизерное изображение сосканированной с журнала фотографии (что убивает качество наповал), то это уже проблема. Хотя существуют программы, обеспечивающие трассировку растра в вектор, но корректно, скажем, перевести полноцветную фотографию человеческого лица в векторное изображение они не могут. В любом случае полученный вектор не сможет передать всю тонкость и глубину красок полноцвета растрового изображения. Даже если при переводе в вектор установить настройки, наиболее точно передающие мелкие детали и градации цвета, все равно при необъятном размере векторного файла итог будет одинаково не идеальным. Положение круто меняется, когда вектор экспортируется в растровое изображение. Здесь почти нет пределов для величины разрешения растра, и при этом он остается одинаково качественным. Т.е. векторное изображение строится примитивных графических объектов, построенных из векторов: линия, прямоугольник, круг, дуга, замкнутая линия, и т.д. Например основой для большинства сложнейших 3D-фигур является треугольник, из множества которого состоит вся объемная фигура. Группа примитивов и есть векторный рисунок. В наше время очень распространена трехмерная графика (3D). На базе трехмерных векторных редакторов строятся сложнейшие сцены. Эту область несомненно нельзя заменить ни чем другим. Как бы талантливы и усидчивы вы не были, нарисовать кистью растрового редактора изображение трехмерного объекта невозможно. Есть немало людей которые пытаются это опровергать, но это не тема для разговора. Просто нужно ценить и понимать что разные технологии компьютерной графики специализированы в разных направлениях и безвкусно смешивать их, или заменять одну другой - глупое упрямство. А вот грамотно комбинировать их можно и нужно. В эпоху современных технологий широко используются возможности компьютерной графики. Это знаменитые кинофильмы (часто отмеченные премией "Оскар"), диснеевские мультфильмы, компьютерные игры и многое другое. Кроме того, компьютерная графика положительно зарекомендовала себя на страницах различных газет и журналов. В настоящее время невозможно представить себе полиграфию без компьютерной графики. Само формирование компьютерных объектов, регулировка цветового баланса, создание любых цветовых и объемных эффектов делают изображение ярким и неповторимым. Сцена 3D-моделей строится на пакетах трехмерного моделирования и в последующем может визуализироваться с любых точек просмотра в 2D-изображение[1,1-2]. При этом есть возможность любых изменений освещения, форм объектов, перспективных деформаций, регулировки параметров материалов и атмосферных эффектов компьютерной трехмерной сцены. Можно создать не только трехмерные стандартные объекты - куб, рюмка и т.д., но и более сложные объекты, скажем, зверюшек, а также различных персонажей и т.д. и т.п.. Применение векторной графики Успехи компьютерных технологий, достигнутые в последние годы, не оставляют места сомнениям при выборе способов получения, хранения и переработки данных о сложных комплексных трехмерных объектах, таких, например, как памятники архитектуры и археологии, объекты спелеологии и т. д. Несомненно, что применение компьютеризации для этих целей - дело не далекого будущего, а уже настоящего времени. Последнее, конечно, в большой мере зависит от количества денежных средств, вкладываемых с этой целью. Наука и инженерия: Системы CAD/CAM используются сегодня в различных областях инженерной конструкторской деятельности от проектирования микросхем до создания самолетов. Ведущие инженерные и производственные компании, такие как Boeing, в конечном счете двигаются к полностью цифровому представлению конструкции самолетов. Архитектура является другой важной областью применения для CAD/CAM и совсем недавно созданных систем класса walkthrough (прогулки вокруг проектируемого объекта с целью его изучения и оценки). Такие фирмы, как McDonald's, уже с 1987 года используют машинную графику для архитектурного дизайна, размещения посадочных мест, планирования помещений и проектирования кухонного оборудования. Есть ряд эффектных применений векторной графики в области проектирования стадионов и дизайна спортивного инвентаря, новый парк в Балтиморе (Baltimore Orioles'Camden Yards Park). Медицина стала весьма привлекательной сферой применения компьютерной графики, например: автоматизированное проектирование инплантантов, особенно для костей и суставов, позволяет минимизировать необходимость внесения изменений в течение операции, что сокращает время пребывания на операционном столе (очень желательный результат как для пациента, так и врача). Анатомические векторные модели также используются в медицинских исследованиях и в хирургической практике. Научные лаборатории продолжают генерировать новые идеи в области визуализации. Задача сообщества компьютерной графики состоит в создании удобных инструментов и эффективных технологий, позволяющих пользователям продолжать научные изыскания за границей возможного и безопасного эксперимента. Например ,проект виртуального туннеля NASA Ames Research Center переносит аэродинамические данные в мир виртуальной реальности, интерес к которой значительно вырос в девяностые годы. NASA Ames было одним из пионеров в использовании и развитии технологий погружения людей в мнимую реальность. Специалисты NASA занимались разработкой специальных шлемов и дисплеев, трехмерных аудиоустройств, уникальных устройств ввода для оператора и созданием соответствующего программного обеспечения. Возник ряд компаний, занимающихся виртуальной реальностью, например: Fakespace, Cristal River Engineering и Telepresence Research. Все эти инженерные и научные применения убеждают, что индустрия машинной графики начала обеспечивать пользователей новой технологией, при которой они действительно уже не заботятся о том, как формируется изображение - им важен результат.Искусство, развлечения и бизнес:Согласно проведенным мною исследованиям, вплоть до начала девяностых годов доходы от использования векторной графики в научно-инженерных приложениях были значительно выше, чем доходы в области бизнеса и других областях, непосредственно не связанных с наукой. Однако в 1991 году доходы были поделены в равной степени, а баланс теперь устойчиво сдвигается в сторону нетехнических приложений. Я считаю, что к 1998 году около двух третей всех доходов от компьютерной графики поступит именно из нетехнических областей применения. Некоторые из этих применений получили настолько широкое распространение, что возникли споры, насколько они действительно являются машинной графикой. Например, мультимедиа воспринимают отдельно от машинной графики, что, однако, не так, вследствие явного доминирования графических изображений. "Классическая" векторная графика до сих пор используется в различных приложениях бизнеса, включая разработку концепции, тестирование и создание новых продуктов, но бизнес также стал лидирующим потребителем систем мультимедиа, например, в обучении или маркетинговых презентациях. Графика все шире проникает в бизнес - сегодня фактически нет документов, созданных без использования какого-либо графического элемента. Соответствующее программное обеспечение специально разработано, чтобы позволить пользователям сконцентрироваться больше на содержании, а не на графическом исполнении. Грядет всплеск использования графики в анимации, особенно в области индустрии развлечений. Кинофильм Стивена Спилберга "Парк Юрского периода" установил в 1993 году новый стандарт фотореализма в графике. Этот фильм не единичный случай применения 3D графики в кино, и Голливуд расширяет сферу использования специальных эффектов машинной графики, только в 1994 году выпустив несколько высокохудожественных фильмов: "The Lion King", "The Mask", "True Lies" и "Forrest Gump". Виртуальная реальность находит свою нишу в индустрии развлечений и видеоиграх. Число виртуальных галерей и развлекательных парков быстро растет. По моим оценкам 30% (то есть 144 млрд. долл.) всего дохода от использования систем виртуальной реальности было получено в прошлом году именно от разного рода игр, и доходы от этих применений будут расти. Лаборатория Media Lab МТИ является уникальным исследовательским центром разработки совершенных систем взаимодействия "человек-компьютер". Например, система News в проекте Future использует последние достижения в области графики, реконструкции звука и изображений, а также моделировании различных объектов для представления новых результатов исследований и их презентации в виде соответствующих текстов, графики, аудио и видео. Работа с векторной графикой на языке функционально программирования. Если при работе с растровой графикой используются уже готовые изображения, а сам редактор необходим только для улучшения цветопередачи, корректировки контраста или яркости, совмещения нескольких фотографий в одну композицию, то векторные редакторы в преобладающем большинстве случаев используют для создания новых рисунков "с нуля". Оболочка: Будем использовать VisualC++ и библиотеку Microsoft Foundation Class Library (MFC). Создаем новый проект со следующими параметрами: Имя проекта Vector; Single document; Document/View architecture support; Класс вида CScroIIView. Остальные параметры проекта установите по своему усмотрению. Заходим в класс документа CVectorDoc и забиваем переменные, которые будем использовать для управления программой. int iPaperWidth; - ширина листа бумаги, на котором мы рисуем int iPaperHeight; - высота Используем бумагу формата А4 (210х297 мм), офисную бумагу для принтеров (программа будет уметь печатать). int iMapMode; - режим отображения. Для того, чтобы рисунки выводились в размере, соответствующем изображению на экране, используем режим MM_HIMETRIC. В этом режиме будет соблюдаться следующее условие: 1 логическая единица = 0,01 то есть, чтобы нарисовать линию длинной 10 мм, необходимо нарисовать прямую длинной 1000 единиц. В конструкторе прописываем: iMapMode=MM_HIMETRIC; iPaperWidth=21000; iPaperHeight=29700; Для установки режима отображения переопределим функцию CScroolView::OnUpdate: void CVectorView::OnUpdate(CView * pSender, LPARAM lHint, CObject* pHint) { CVectorDoc *pDoc=GetDocument(); CSize sizePaper; sizePaper.cx=pDoc->iPaperWidth; sizePaper.cy=pDoc->iPaperHeight; SetScrollSizes(pDoc->iMapMode, sizePaper); CScrollView::OnUpdate(pSender, lHint, pHint); } Чтобы пользователю была видна область для рисования, переопределим метод CScrollView::OnPrepareDC, который будет ограничивать область рисования: void CVectorView::OnPrepareDC(CDC* pDC, CPrintInfo * pInfo) { CScrollView::OnPrepareDC(pDC, pInfo); CVectorDoc *pDoc=GetDocument(); CPoint oPt(0, -pDoc->iPaperHeight); //создаем точку в левом нижнем углу pDC->LPtoDP(&oPt); //переводим точку из логических координат в координаты физического устройства pDC->SetViewportOrg(oPt); //устанавливаем начало координат pDC->IntersectClipRect(0, 0, pDoc->iPaperWidth, pDoc->iPaperHeight); //ограничиваем область рисования } Теперь выделим область рисования, залив недоступную область серым фоном. Для этого используем сообщение WM_ERASEBKGND. Создадим обработчик этого сообщения: BOOL CVectorView::OnEraseBkgnd(CDC *pDC) { BOOL bResult=CScrollView::OnEraseBkgnd(pDC); CBrush oBrushGray(GetSysColor(COLOR_GRAYTEXT)); //кисть для заливки FillOutsideRect(pDC, &oBrushGray); //заливка неиспользуемой области return(bResult); } Для изменения пользователем размеров бумаги создадим диалоговое окно. В шаблон диалогового окна нужно поместить два поля ввода (Edit box) "Ширина" и "Высота" и подписать, используя Static text. Рядом с каждым полем ввода разместим элемент Spin, включив в его параметрах свойства Auto buddy и Set buddy integer. Кнопки OK и Cancel уже присутствуют. Для работы с диалоговым окном создадим отдельный класс CPaperSizeDlg. Для полей ввода создадим переменные UINT m_uHeight, UINT m_uWidth и привяжем их к соответствующим идентификаторам. Также можно ограничить диапазон вводимых пользователем значений: 0...210 для ширины и 0...297 для высоты листа бумаги. Для управления Spin-элементами создадим переменные CSpinButtonCtrl m_ctrlSpinHeigh и CSpinButtonCtrl m_ctrlSpinWidth. Создадим функцию-обработчик сообщения WM_INITDIALOG, которое будет поступать перед созданием диалогового окна: BOOL CPaperSizeDlg::OnInitDialog() { CDHtmlDialog::OnInitDialog(); m_ctrlSpinWidth.SetRange(0, 210); // диапазон для значений элементов Spin m_ctrlSpinHeight.SetRange(0, 297); return(TRUE); } Перейдем на вкладку Resource View ->Menu ->IDR_MAINFRAME. Откроется шаблон меню программы. Здесь добавим пункт меню для вызова диалогового окна и назначим функцию-обработчик: void CVectorDoc::OnFilePapersize() { CPaperSizeDlg oPaperSize; oPaperSize.m_uHeight=iPaperHeight/100; //передаем в окно текущие размеры бумаги в миллиметрах oPaperSize.m_uWidth=iPaperWidth/100; if(oPaperSize.DoModal()==IDOK) { //если пользователь нажал ОК, принимаем новые параметры размера бумаги iPaperHeight=oPaperSize.m_uHeight*100; iPaperWidth=oPaperSize.m_uWidth*100; UpdateAllViews(NULL); } }

Научные конференции

 

(c) Архив публикаций научного журнала. Полное или частичное копирование материалов сайта возможно только с письменного разрешения администрации, а также с указанием прямой активной ссылки на источник.