Учебное пособие: Методические указания по выполнению курсовой работы по дисциплине «машинная графика» Москва 1995
Название: Методические указания по выполнению курсовой работы по дисциплине «машинная графика» Москва 1995 Раздел: Остальные рефераты Тип: учебное пособие ![]() | |||||||||||||||
ГОСУДАРСТВЕННЫЙ КОМИТЕТ РОССИЙСКОЙ ФЕДЕРАЦИИ ПО ВЫСШЕМУ ОБРАЗОВАНИЮ МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ С.М.АВДЕЕВА, А.В.КУРОВ МЕТОДИЧЕСКИЕ УКАЗАНИЯ ПО ВЫПОЛНЕНИЮ КУРСОВОЙ РАБОТЫ ПО ДИСЦИПЛИНЕ «МАШИННАЯ ГРАФИКА» Москва 1995 ОГЛАВЛЕНИЕСтр. 1. Содержание курсовой работы 2. Требования к оформлению курсовой работы 3. Пример задания на выполнение курсовой работы . 4. Список рекомендуемых тем курсовых работ Список литературы, используемой при выполнении курсовой работы 6. Алгоритмы машинной графики, используемые при вы 6.1. Алгоритм Робертса 6.2. Алгоритм Варнока 6.3. Алгоритм Вейлера-Азертона 6.4. Алгоритм, использующий список приоритетов . . 6.5. Алгоритм, использующий 2-буфер 6.6. Алгоритм построчного сканирования 6.7. Алгоритм определения видимых поверхностей 6.8. Алгоритм создания реалистических изображений. 1. СОДЕРЖАНИЕ КУРСОВОЙ РАБОТЫ Курсовая работа по дисциплине «Машинная графика» является первой курсовой работой, выполняемой студентами, обучающимися по специальности «Программное обеспечение вычислительной техни-ки и автоматизированных систем». При ее выполнении студент должен продемонстрировать умение применять теоретические знания и практические навыки при разработке законченного программного продукта. Курсовая работа представляет собой комплексную работу и ее выполнение требует использования знаний, полученных не только в одной конкретной дисциплине, но и в ходе предшествующего изучения как фундаментальных и общеинженерных дисциплин («Высшая математика», «Физика», «Инженерная графика»), так и дисциплин специальности («Основы информатики», «Типы и структуры данных», «Программирование на языке Си», «Системное программирование», «Об»ектно-ориентированное программирование»). Курсовая работа должна быть посвящена разработке законченного программного продукта, позволяющего моделировать трехмерные и/или реалистические изображения на экране дисплея. Такая направленность работы связана с тем, что алгоритмы нижнего уровня студенты достаточно глубоко и всесторонне изучают в ходе теоретических и практических занятий в течение предыдущего семестра. Алгоритмы верхнего уровня (предназначенные для изображения трехмерных и реалистических об»ектов) достаточно громоздки, программы, их реализующие, об»емны, что практически делает невозможным их разработку и отладку в ходе лабораторных работ. В ходе выполнения курсовой работы студенты решают задачи, связанные с обоснованием и разработкой новых или модификацией -2-и использованием известных методов и алгоритмов представления об»ектов, выбора и обоснования структуры данных, а также технологические и эргономические вопросы. На защиту должны быть представлены: комплекс программ, расчетно-пояснительная записка и графическая часть. Комплекс программ представляет собой законченный программный продукт, который может настраиваться на конкретную прог-раммно-техническкую среду ЭВМ. Для взаимодействия пользователя с программной системой студент разрабатывает инткрфейс пользователя, включающий простое общепринятое меню, необходимые подсказки и помощь как по эксплуатации программы, так и для интерпретации получаемых результатов. Расчетно-пояснительная записка должна иметь об»ем 30-40 листов рукописного (или машинописного) текста на листах формата А4. Записка должна содержать следующие разделы: 1)Введение 2)Конструкторский 3)Технологический 4)Экспериментально-исследовательский 5)3аключение Кроме того, записка должна иметь содержание, список использованной литературы, а также в нее могут входить различные приложения. Во введении дается обзор и анализ существующих программных систем в выбранном направлении, обосновывается необходимость разработки нового комплекса программ. Здесь же проводится анализ и краткое описание с указанием их характеристик известных алгоритмов решения стоящей задачи. Об»ем введения 3-5 листов. -3-В конструкторской части на основе сделанного во введении обзора проводится выбор и обоснование предлагаемого алгоритма. При использовании известного алгоритма следует более подробно продемонстрировать его преимущества в сравнении с другими известными алгоритмами, указать сложности, особенности его практической реализации, пути решения задач, возникающих в ходе программной реализации. При разработке нового метода или алгоритма следует подробно изложить полученные самостоятельно (или недостаточно известные) математические соотношения, положенные в основу решения задачи, а также описать предлагаемый алгоритм. При этом следует четко выделить основные этапы работы алгоритма с указанием необходимых исходных данных для его работы и получаемых на каждом этапе результатов. Как правило, выбор алгоритма тесно связан с используемой структурой данных. Поэтому конструкторская часть должна также содержать обоснование аппроксимации представляемых кривых, поверхностей тел, граней и т.д. Должны быть указаны исходные данные, с помощью которых задаются отображаемые об»екты, проведено сравнение с другими возможными способами их задания. При этом следует проанализировать избыточность выбранного способа описания об»ектов, показать преимущества или удобства при оперировании этими данными. На основе выбранных данных для представления об»ектов студент осуществляет последующий выбор и обоснование используемых типов и структур для их машинного представления. При их выборе следует исходить из возможностей языка программирования для их представления, затрат памяти на хранение, времени на обработку, -4-размерности данных. Выбор исходных данных и формы их представления должен увязываться с такой характеристикой, как их об»ем и удобства пользователя при вводе. В частности, ввод большого количества данных утомляет пользователя и увеличивает вероятность ввода ошибочных данных. В данной части записки могут выполняться расчеты для определения об»емов памяти, необходимой для хранения исходных данных, промежуточных и окончательных результатов, а также расчеты, позволяющие оценить время решения задачи на ЭВМ. Результаты таких расчетов должны использоваться при сравнении альтернативных вариантов алгоритмов, а также оценки возможности практической реализации стоящей задачи на имеющейся технической базе. Об»ем конструкторской части должен составлять 35-55% всего об»ема записки. Технологический раздел должен содержать обоснование технологии изготовления комплекса программ: модульная или об»ект-но-ориентированная. Необходимо представить модульную структуру комплекса, обоснование выбранного принципа разбиения программ на модули, назначение, взаимосвязь с другими составными частями каждого модуля. В случае использования об»ектно-ориентированно-го программирования следует обосновать и описать введенные классы об»ектов. В этом же разделе решается вопрос с выбором и обоснованием языка программирования. Большое внимание здесь должно быть также уделено разработке интерфейса пользователя, выбору меню, которое бы в наилучшей степени отвечало характеру работы спроектированного комплекса программ и было удобным и понятным пользователю. Данный раздел должен заканчиваться изложением руководства программиста, в котором излагаются требования к аппаратным средствам и программному обеспечению ЭВМ, а также излагается порядок работы с комплексом программ. Эта часть оформляется в соответствии с ГОСТ 19.504-79 и она должна содержать следующие разделы: -назначение и условия применения программы; -характеристики программы; -обращение к программе; -входные и выходные данные; -сообщения. В разделе «Назначение и условия применения программы» должны быть указаны назначение и функции, выполняемые программой, условия, необходимые для выполнения программы (объем оперативной памяти,требования к составу и параметрам периферийных устройств, требования к программному обеспечению). В разделе «Характеристики программы» приводится описание основных характеристик и особенностей программы (временные, режим работы, средства контроля правильности выполнения и самовосстановления программы). В разделе «Обращение к программе» должно быть приведено описание процедур вызова программы (способы передачи управления и параметров данных). В разделе « Выходные данные» должно быть приведено описание используемой входной и выходной информации. В разделе «Сообщения» должны быть указаны тексты сообщений, выдаваемых программой в ходе ее выполнения, описаны их содержание и действия, которые необходимо предпринять по этим сообщениям. -6-В приложениях к руководству программиста могут приводиться дополнительные материалы (примеры, иллюстрации, таблицы, графики). Технологический раздел должен содержать разработанные тесты для проверки правильности работы комплекса программ, результаты тестирования на тестовых примерах. Об»ем этой части работы составляет 35-40%. Исследовательско-экспериментальный раздел является рекомендуемой частью курсовой работы. Он должен содержать результаты теоретического или экспериментального исследования в ходе выполнения курсовой работы. В первом случае это могут быть результаты, полученные при исследовании математического метода, положенного в основу алгоритма. Во втором случае экспериментально исследуется разработанный комплекс программ с целью получения значений временных, об»емных и иных характеристик комплекса программ (алгоритма) в зависимости от количества изображаемых об»ектов, их сложности, точности представления (вида аппроксимации, количества граней, аппроксимирующих криволинейную поверхность и т.д.). В этой части работы должны быть представлены примеры использования комплекса программ с изложением постановки конкретной решаемой задачи, описанием конкретных вводимых исходных данных и полученных результатов с указанием значений характеристик требуемых ресурсов ЭВМ (затраты памяти, время счета и т. д.). Об»ем этой части записки составляет 10-15%. В приложении даются листинги программ пакета или его наиболее интересных составляющих частей. Здесь же могут приводиться твердые копии изображений, получаемых на экране дисплея и -7- выведенные затем на принтер. При наличии аналитических результатов (в виде числовых величин) даются также и их распечатки, графики, диаграммы. Представленные результаты должны сопровождаться также распечатками исходных данных, для которых они были получены. Все разделы работы должны быть увязаны тесным образом между собой и представлять собой единое законченное целое. Материал записки должен излагаться грамотным техническим языком, быть оформлен в соответствии с требованиями ЕСКД, ГОСТ, ЕСПД. За принятые решения, правильность выполненных расчетов и сделанных выводов ответственность несет автор курсовой рабо-ты-студент. Графическая часть данной курсовой работы носит иллюстративный, вспомогательный характер. Об»ем ее должен составлять 2-3 листа формата А1. Основное назначение графической части - помочь студенту наиболее полно в наглядной форме продемонстрировать во время защиты работы существо разработанного программного продукта, изложить основные алгоритмы и математические методы, положенные в основу работы программ. Графическая часть может выполняться карандашом, тушью или фломастером. При этом все листы должны выполняться однотипно. На листах графической части должны быть представлены: постановка задачи (в словесной и (или) математической форме), функциональная схема системы, схемы алгоритмов, структура данных, интерфейс пользователя, сравнительные характеристики пакетов (алгоритмов)-аналогов. В графической части могут быть также представлены иллюстрации (копии экранов) полученных в ходе работы комплекса программ результатов, а также выводы по работе. Защита курсовой работыЗащита курсовой работы подводит итог всей работы студента в течение семестра. Защита курсовых работ проходит, как правило, в период зачетной сессии. Предварительно составляется график работы комиссий по приему курсовых работ. Обязанность студента записаться на защиту в соответствии с предлагаемым графиком и не допускать переноса срока защиты. Защита осуществляется публично, кроме членов комиссии (2-3 преподавателя) и защищающегося, могут присутствовать другие преподаватели, сотрудники и студенты. Перед защитой работы студенты должны заблаговременно инсталлировать на ПЭВМ разработанные программные изделия. В начале защиты студент делает доклад с изложением сути проделанной работы, для иллюстрации основных положений он использует графический материал. После этого, как правило, следуют вопросы со стороны членов комиссии, на которые студент обязан ответить. Вторая часть защиты заключается в демонстрации комплекса программ. При этом необходимо пояснить правила взаимодействия пользователя с программой, проиллюстрировать на заранее подготовленных примерах характерные особенности реализованного метода (алгоритма). Затем могут быть заданы вопросы по практической части. Доклад должен быть кратким (5-7 минут), четким и ясным. В докладе должны быть выделены основные задачи, стоявшие при вы- -9-полнении работы, указаны пути их решения и об»яснены полученные результаты. Не следует впадать в излишнюю детализацию, останавливаться на второстепенных моментах. Все частности члены комиссии могут выяснить путем постановки соответствующих вопросов. Заканчиваться доклад должен выводами по проделанной работе. Защита данной курсовой работы является практически первым публичным выступлением студента, поэтому долг руководителя -помочь студенту в составлении доклада. Нельзя строить доклад как некоторое описание или пояснение графической части. Наоборот, графическая часть должна пояснять и помогать в более наглядной форме доносить до слушателей мысли выступающего. Студент должен перед защитой совместно с преподавателем продумать ответы на возможные вопросы, определить основные достоинства и недостатки курсовой работы, что поможет при ответах на вопросы. Оценка курсовой работы складывается из ряда показателей, среди которых можно выделить 1)качество, глубину проработки темы, соответствие работы поставленному техническому заданию; 2)качество, об»ем программного продукта, удобство его эксплуатации; 3)качество доклада, правильность ответов на вопросы. 2. ТРЕБОВАНИЯ К ОФОРМЛЕНИЮ КУРСОВОЙ РАБОТЫ Оформление расчетно-пояснительной записки осуществляется в соответствии с ГОСТ 7.32-81 ЕСКД. Название разделов и их возможное содержание уже рассмотрены, возможные названия подразделов, их об»ем приведены в разде- - 10- ле 3. Все листы записки, включая иллюстрации, расположенные на отдельных листах, имеют сквозную нумерацию. Иллюстрации, выполненные на листах, больших чем формат А4, размещаются в конце записки после заключения и учитываются как одна страни-ца.Номер ставится в правом верхнем углу. Первым листом является титульный лист (он не нумеруется). Записка сшивается студентом, причем обложкой является стандартный лист формата АЗ, выдаваемый руководителем. При его отсутствии студент самостоятельно изготавливает обложку из ватмана или картона. Вторым листом является задание на выполнение курсовой работы. Задание оформляется на стандартном бланке и подписывается руководителем. При отсутствии стандартного бланка задание оформляется на обычном листе и должно содержать все необходимые разделы, а также подпись руководителя. После задания должен размещаться реферат, который должен содержать сведения об об»еме курсовой работы, количестве иллюстраций, таблиц, количестве использованных источников. Затем приводится перечень ключевых слов (от 5 до 15) в именительном падеже, перечисляемых в строку через запятую. В тексте реферата указываются основные сведения о разработанном комплексе программ (цель разработки, метод исследования, полученные результаты, их новизна, область применения, основные характеристики). После реферата размещается содержание расчетно-пояснитель-ной записки, которое включает наименования всех разделов, подразделов и пунктов (если они имеют названия) с указанием номеров страниц, где они начинаются. Далее следует перечень условных обозначений, символов, - 11 - единиц и терминов. Они размещаются в алфавитном порядке, причем слева приводится сокращение, а справа его расшифровка. Если сокращение используется менее трех раз, то расшифровка может быть дана в тексте. Вслед за перечнем располагаются введение, основная часть и заключение. В заключении должны содержаться краткие выводы по результатам выполненной работы и предложения по их использованию, дальнейшему развитию или модификации разработанного комплекса программ. Должно быть указано соответствие технических характеристик разработанного комплекса программ характеристикам, указанным в техническом задании. Об»ем заключения 1-2 листа. После заключения должны располагаться список использованных литературных источников и приложения. Сведения об использованных источниках располагаются в том же порядке, что и ссылки на них в тексте записки, список оформляется в соответствии с ГОСТ 7.1-76. В расчетно-поясни-тельной записке ссылки на использованные литературные источники (книги, статьи, стандарты, справочники) даются в местах, где были использованы сведения из этой литературы. Ссылки представляют собой порядковый номер по списку источника, заключенный в косые черточки, например, /3,5/. Библиографическое описание источника составляется на языке текста этого источника . Бибилиографическое описание представляет собой совокупность сведений о документе, необходимых и достаточных для общей характеристики и идентификации документа. Библиографическое описание состоит из элементов, об»еди-ненных в области, и заголовка. Элементы и области приводятся в - 12-последовательности, установленной стандартом. В описании можно выделить следующие составные части: основное заглавие, область издания, область выходных данных, область количественной характеристики, т.е. должны указываться сведения об авторе, названии источника, издательстве, месте и дате издания, об»еме. Каждой области описания (кроме первой) предшествует знак тире и точка. Внутри элемента пунктуация должна соответствовать нормам языка, на котором составлено описание. В заголовке описания фамилии авторов приводятся в именительном падеже с указанием инициалов после фамилии, фамилии нескольких авторов разделяются запятыми. Если книга имеет более трех авторов, то сначала располагается название книги, а затем перечисляются авторы, причем в этом случае инициалы предшествуют фамилии. При наличии многих авторов перечисляют первых трех, а затем добавляют слово «и др.». После заглавия через двоеточие даются сведения, поясняющие заглавие, уточняющие назначение, а также могут указываться сведения о дате и месте проведения мероприятия (например,для сборников материалов конференций). Помещаемые после заглавия сведения об ответственности отделяют от заглавия косой чертой. Область выходных данных содержит сведения о том, где, кем и когда была опубликована книга. Название места издания приводят в именительном падеже. В качестве даты приводится год издания. Область количественной характеристики содержит об»ем книги в страницах или начальную и конечную страницы расположения для статей, тезисов докладов и т.д. Сведения о документе, в котором помещена составная часть (например, статья из сборника), располагаются после сведений о составной части через знак две косые черты, причем до и после него делается по одному пробелу. Примеры оформления пристатейного библиографического списка приведены в списке рекомендуемой литературы. Каждое приложение следует начинать с нового листа с указанием в правом верхнем углу слова «ПРИЛОЖЕНИЕ». Приложение должно иметь содержательный заголовок. Каждое приложение имеет свой порядковый номер, для нумерации используются арабские цифры. Нумерация разделов, таблиц, рисунков, формул ведется в пределах каждого приложения. Располагаемые в приложениях распечатки программ должны быть сложены по формату А4. Текст расчетно-пояснительной записки располагается на стандартных листах бумаги формата А4 с одной стороны, должны выдерживаться следующие размеры полей: левое - 30 мм, правое -10 мм, верхнее - 15 мм, нижнее - 20 мм. Заголовки разделов располагаются симметрично тексту прописными буквами. Заголовки подразделов располагают с абзацным отступом строчными буквами (кроме первой прописной). Перенос слов в заголовках не допускается, точка в конце не ставится. Каждый раздел должен начинаться с нового листа. Номера разделов обозначаются арабскими цифрами с точкой в конце, подразделы нумеруют арабскими цифрами в пределах каждого раздела (состоит из номера раздела и подраздела, разделенных точкой, в конце ставится точка), например, 2.3. Пункты нумеруют арабскими цифрами в пределах каждого подраздела, например, 2.3.1. Иллюстрации обозначают словом «Рис.» и нумеруют последовательно арабскими цифрами в пределах раздела, при этом номер рисунка состоит из номера раздела и номера рисунка, например, - 14-рис. 2.3. Иллюстрации должны иметь наименование. При необходимости их снабжают поясняющими данными. Наименование иллюстрации помещают над ней, поясняющую надпись - под ней.Номер рисунка помещается ниже поясняющей надписи. Таблицы нумеруют аналогично, при этом вверху таблицы справа пишут слово «Таблица» и указывают номер. Каждая таблица должна иметь заголовок. Заголовок и слово Таблица начинают с прописной буквы. Заголовки граф пишут с прописных букв, подзаголовки - со строчных, если они составляют одно предложение с заголовком. Если подзаголовки имеют самостоятельное значение, то они пишутся с прописных букв. Графы таблиц делить по диагонали не допускается. Иллюстрации и таблицы располагают в тексте после первой ссылки на них так, чтобы их можно было читать без поворота записки или с поворотом по часовой стрелке на 90 градусов. Формулы нумеруют арабскими цифрами в пределах раздела, при этом номер состоит из номера раздела и порядкового номера формулы и помещается в круглых скобках у правого поля листа на строке самой формулы. Под формулой располагают пояснение значений символов в той же последовательности, что и в формуле. Значение каждого символа пишется с новой строки, первому символу предшествует слово «где» без двоеточия. Ссылка на формулу производится путем указания ее номера в круглых скобках. При изображении схем следует руководствоваться правилами оформления, изложенными в действующих ГОСТ, ЕСКД, ЕСПД. Часть графического материала должна дублироваться в записке. Это требование является обязательным, так как расчетно-пояснительная записка является самостоятельным документом и ее содержание - 15- должно быть понятно и без графической части. Расчетно-пояснительная записка подписывается студентом, а затем преподавателем - руководителем курсовой работы. Подпись руководителя означает допуск студента к защите курсовой работы. 3. ПРИМЕР ЗАДАНИЯ НА ВЫПОЛНЕНИЕ КУРСОВОЙ РАБОТЫ ЗАДАНИЕ НА КУРСОВОЕ ПРОЕКТИРОВАНИЕ ПО КУРСУ «МАШИННАЯ ГРАФИКА» СТУДЕНТА ГРУППЫ ИУ7 - 51 СИДОРОВА С.Н. ТЕМА КУРСОВОЙ РАБОТЫ «Разработка ППП, моделирующего движение группы динамических объектов в пространстве и синтезирующего их изображение на экране дисплея.» ТЕХНИЧЕСКОЕ ЗАДАНИЕ Промоделировать движение и получить изображение на экране графического дисплея группы объектов (от 1 до 10), совершающих управляемые маневры в пространстве. Объекты описываются координатами вершин (x,y,z), ребрами и гранями. В качестве управляющих сигналов задаются значения векторов угловой и линейной скоростей: W = F(t) , t [tO,tk]; · 16- V = F(t) , t [tO,tk], где [tO,tk] -интервал времени моделирования. Предполагается, что картинная плоскость изображения совпадает с экраном графического дисплея. Частота смены изображения не менее 25 Гц. При работе с изображением реализовать процедуру « Быстрого перемещения изображения объекта». Требования к процедуре «Быстрого перемещения изображения об»екта»: 1. Изображение объекта задается битовой картой. 2. Смена номера изображения производится под управлением 3. После переноса изображения управление передается вызы 4. В процедуру передаются следующие параметры: - координаты центра изображения (хс,ус); - номер объекта ( номер группы битовой карты); - номер объекта в группе; - адреса всех битовых карт; - текущие координаты изображения ( проекции (xvi, yvi) 5. Размер изображения: - max: 32 * 20 пикселов; - min: 8*5 пикселов. 6. Интерфейс процедуры должен соответствовать стандарту - 17- СОСТАВ КУРСОВОЙ РАБОТЫ Расчетно-пояснительная записка. Графическая часть. Пакет программ. ПРИМЕРНОЕ СОДЕРЖАНИЕ СОСТАВНЫХ ЧАСТЕЙ РАБОТЫ: 1. ВВЕДЕНИЕ 2. КОНСТРУКТОРСКИЙ РАЗДЕЛ 2.1. Обзор и анализ существующих программных систем 2.2. Выбор, обоснование и описание метода моделирования и ал 3. ТЕХНОЛОГИЧЕСКИЙ РАЗДЕЛ 3.1 Выбор и обоснование языка программирования 3.2. Интерфейс пользователя 3.3. Хранение и обмен данными в системе 3.4. Разработка и отладка текста программы 3.5. Требования к аппаратуре 3.6. Требования к программному обеспечению 3.7. Порядок работы 3.8. Обращение к программе 3.9. Входные и выходные данные 3.10.Сообщения системы 4. ЭКСПЕРИМЕНТАЛЬНО-ИССЛЕДОВАТЕЛЬСКИЙ РАЗДЕЛ 4.1. Тестирование программы 4.2. Примеры использования программы 5. СПИСОК ЛИТЕРАТУРЫ 6. ПРИЛОЖЕНИЯ - 18- П.1. Листинг программы П.2. Копии экрана П.З. Распечатки результатов ГРАФИЧЕСКАЯ ЧАСТЬ1. Постановка задачи 2. Математические методы решения задачи 3. Функциональная схема системы 4. Схема алгоритма 5. Сравнительные характеристики аналогов 6. Листинг программы ( фрагмент ) 7. Интерфейс пользователя 8. Иллюстрация работы с примером задания исходных данных На защиту должны быть представлены: 1. Пояснительная записка объемом 25 - 30 страниц. 2. Графическая часть - 3 листа формата А1. 4. СПИСОК РЕКОМЕНДУЕМЫХ ТЕМ КУРСОВЫХ РАБОТ 1. Реализация алгоритма Робертса для об»ектов, описываемых 2. Реализация алгоритма Варнока для об»ектов, описываемых 3. Реализация алгоритма с приоритетами для об»ектов, опи 4. Реализация алгоритма Z-буфера для об»ектов, описываемых - 19- 5. Реализация алгоритма построчного сканирования для 6. Реализация алгоритма трассировки лучей для об»ектов, 7. Реализация алгоритма трассировки лучей с учетом источ 8. Реализация простого алгоритма закраски. 9. Реализация алгоритма закраски по методу Гуро. 10. Реализация алгоритма закраски по методу Фонга. 11. Реализация и сравнительное исследование алгоритмов зак 12.Построение реалистических изображений с учетом теней. 13. Реализация алгоритмов для построения изображений с 14. Пакет деловой графики (двух- и трехмерный варианты). 15. Пакет для изображения и манипуляции с трехмерным 16. Пакет для изображения рельефа местности на основе ли 17. Обучающий пакет для об»яснения происхождения коничес 18. Пакет для изображения поверхностей вращения по задан 19. Графическая библиотека примитивов для построения 5. СПИСОК ЛИТЕРАТУРЫ, ИСПОЛЬЗУЕМЫЙ ПРИ ВЫПОЛНЕНИИ -20- КУРСОВОИ РАБОТЫ1. Аммерал Л. Машинная графика на языке Си.-М.:СолСистем, Т. 1 :Принципы программирования в машинной графике.-224 с. Т.2:Машинная графика на персональных компьютерах.-232 с. Т.З.'Интерактивная трехмерная машинная графика.-317 с. Т.4:Программирование графики на Турбо Си.-221 с. 2. Булатов В., Дмитриев В. Увидеть невидимое // Компьютер- 3. Булатов В., Дмитриев В. Искусство преображения информации. 4.1 // КомпьютерПресс.-1993.-N4.-C.11-16. 4. Булатов В., Дмитриев В. Искусство преображения информации. 4.2 // КомпьютерПресс.-1993.-N5.-C.20-26. 5. Гардан И., Люка М. Машинная графика и автоматизация конс 6. Геометрический процессор синтезирующей системы визуализации 7. Гилой В. Интерактивная машинная графика.-М.:Мир, 1981.-380 с. 8. Ковалев A.M., Талныкин Э.А. Машинный синтез визуальной 9. Курковский С. Интервальные методы в компьютерной графике // Ю.Ньюмен У., Спрулл Р. Основы интерактивной машинной графики.-М.:Мир,1976.-573с. 11 .Павлидиус Т. Алгоритмы машинной графики и обработки изображений.- М.:Радио и связь, 1986.-400 с. -21 -12.Роджерс Д., Адаме Дж. Математические основы машинной графики. -М.:Мир, 1980.-240с. 13.Роджерс Д. Алгоритмические основы машинной графики.-М.:Мир, 1989.-512с. И.Уокер Б.С., Гурд Дж., Дроник Е.А. Интерактивная машинная графика.-М. :Машиностроение, 1980.-168с. 15.Фоли Дж., вэн Дэм А. Основы интерактивной машинной графики. -М.:Мир,1985.-Т.1:375 с.,Т.2:368 с. 16.Фролов А.Г., Фролов Г.В. Программирование видеоадаптеров CGA, EGA и VGA. - М.: Диалог - МИФИ, 1992.-28S с. 17. Хирн Д., Бейкер М. Микрокомпьютерная графика.-М.:Мир, 1987. 18. ШикинЕ.В., Боресков А.В., Зайцев А.А. Начала компьютерной 19. Эгрон Ж. Синтез изображений. Базовые алгоритмы.-М.:Радио и 20. Эйнджел И. Практическое введение в машинную графи- 21. Эндерле Г., Кэнси К., Пфафф Г. Программные средства машинной 1988.-479 с. 6. АЛГОРИТМЫ МАШИННОЙ ГРАФИКИ, ИСПОЛЬЗУЕМЫЕ ПРИ ВЫПОЛНЕНИИ КУРСОВОЙ РАБОТЫАлгоритмы машинной графики можно разделить на два уровня: нижний и верхний. Группа алгоритмов нижнего уровня иредназначе- -22- на для реализации графических примитивов. Они достаточно подробно изучаются во время лекционных занятий и реализуются студентами на практических занятиях. Эти алгоритмы или подобные им воспроизведены в графических библиотеках языков высокого уровня, реализованы аппаратно в графических процессорах и графических рабочих станциях. Однако для конкретных случаев можно написать программу, существенно более эффективную по времени. Среди алгоритмов нижнего уровня можно выделить группу простейших в смысле используемых математических методов и отличающихся простотой реализации. Как правило, такие алгоритмы не являются наилучшими по объему выполняемых вычислений или требуемым ресурсам памяти. Поэтому можно выделить вторую группу алгоритмов, использующих более сложные математические предпосылки и отличающихся большей эффективностью. К третьей группе следует отнести алгоритмы, которые могут быть без больших затруднений реализованы аппаратно (допускающие распараллеливание, рекурсивные, реализуемые в простейших командах). В эту группу могут попасть и алгоритмы, представленные в первых двух группах. Наконец, к четвертой группе можно отнести алгоритмы со специальными эффектами, например, с устранением лестничного эффекта. К алгоритмам верхнего уровня относятся в первую очередь алгоритмы удаления невидимых линий и поверхностей. Задача удаления невидимых линий и поверхностей продолжает оставаться центральной в машинной графике. От эффективности алгоритмов, -23-позволяющих решить эту задачу, зависят качество и скорость построения трехмерного изображения. Однако при этом не следует забывать, что вывод объектов обеспечивается примитивами, реализующими алгоритмы нижнего уровня, поэтому нельзя игнорировать проблему выбора и разработки эффективных алгоритмов нижнего уровня. Для разных областей применения машинной графики на первый план могут выдвигаться разные свойства алгоритмов. Для научной графики большое значение имеет универсальность алгоритма, быстродействие может отходить на второй план. Для систем моделирования, воспроизводящих движущиеся объекты, быстродействие становится главным критерием, поскольку требуется генерировать изображение практически в реальном масштабе времени. В данном пособии рассматривается ряд алгоритмов верхнего уровня, рассчитанных на работу с примитивами, позволяющих получить хорошие результаты при небольших затратах памяти и процессорного времени. К задаче удаления невидимых линий и поверхностей примыкает задача построения реалистических изображений, т.е. учета явлений, связанных с количеством и характером источников света, учета свойств поверхности тела (прозрачность, преломление, отражение света). В пособии рассматриваются алгоритмы двух последних групп, поскольку усилия студентов во время выполнения курсовой работы сосредоточиваются именно на реализации и использовании данных алгоритмов. Сложность задачи удаления невидимых линий и поверхностей привела к появлению большого числа различных способов ее реше- -24- ния, различных алгоритмов, но наилучшего решения поставленной задачи не существует. Главным недостатком всех алгоритмов является значительный объем вычислений, необходимых для определения удаляемых линий и поверхностей. Вначале реализации любого алгоритма удаления невидимых линий и поверхностей для повышения эффективности его работы обычно проводится сортировка координат объектов синтезируемой сцены. Основная идея сортировки заключается в том, что, чем дальше расположен объект от точки визирования, тем больше вероятность того, что он будет полностью или частично экранироваться одним из объектов, более близких к точке наблюдения. Алгоритмы удаления невидимых линий и поверхностей классифицируются по способу выбора систем координат или пространства, в котором они работают. Первый класс - это алгоритмы, работающие в объектном пространстве, имеющие дело с физической системой координат (мировые координаты), в которой они описаны. Второй класс алгоритмов работает в пространстве изображения и имеет дело с системой координат того устройства, на котором эти объекты синтезируются. Алгоритмы первого класса используются в тех случаях, когда требуется высокая точность изображения объектов. Синтезируемые в этом случае изображения можно свободно увеличивать (уменьшать) во много раз, сдвигать или поворачивать. Точность вычислений алгоритмов второго класса ограничивается разрешающей способностью экрана. Результаты, полученные в пространстве изображения, а затем увеличенные (уменьшенные) во много раз, не будут соответствовать исходной сцене. Различны и объемы вычислений для различного рода алгоритмов. Так объем вычислений для алгоритмов, работающих в объектом -25-пространстве, и сравнивающих каждый объект сцены со всеми остальными объектами этой сцены, растет теоретически как квадрат числа объектов. Аналогично, объем вычислений алгоритмов, работающих в пространстве изображений и сравнивающих каждый объект с позициями пикселов в экранной системе координат, растет теоретически, как произведение числа объектов на число пикселов экрана. На практике, сравнительный анализ существующих алгоритмов удаления невидимых линий крайне затруднителен. В различных случаях при работе с различными моделями синтезируемого пространства эффективны различные алгоритмы. Даже при работе с одной и той же моделью оказывается, что в зависимости от точки наблюдения следует использовать различные алгоритмы. 6.1. АЛГОРИТМ РОБЕРТСА Алгоритм Робертса представляет собой первый из известных алгоритмов удаления невидимых линий. Этот математически элегантный метод работает в объектном пространстве. Модификации алгоритма, использующие предварительную пространственную сортировку вдоль оси z и простые габаритные или минимаксные тесты, позволяют добиться почти линейной зависимости роста объема вычислений от роста числа объектов. Роберте решил проблему удаления невидимых линий для объектов, составленных из 1 Овьшуклых многогранников. Любой замкнутый объект с плоскими гранями можно представить в виде набора выпуклых многогранников ( рис. ), то есть в виде наборов плоскостей, образующих грани данных многогранников. Поскольку объем вычислений в алгоритмах удаления невидимых линий и поверхностей -26-растет с увеличением числа многоугольников, для описания поверхностей объектов желательно использовать многоугольники с более чем тремя сторонами. Таким образом, для реализации алгоритма необходимо вначале где X,Y и Z - мировые координаты. В матричной форме это уравнение запишется в виде: [XYZ1][P] = 0,где р 2= о L - Любой выпуклый объект можно описать матрицей объекта, состоящей из коэффицентов уравнений плоскостей:
где каждый столбец содержит коэффициенты одной плоскости. Известно, что любая точка на плоскости однозначно определя- ется двумя координатами; точка в пространстве в однородных коор- динатах описывается вектором [S] = [X Y Z 1]. Известно также, если точка лежит на плоскости, то скалярное произведение [S][P] равно 0; если же точка не лежит на плоскости, то знак этого скалярного произведения показывает, по какую сторону от плоскости расположена точка. В алгоритме Робертса предполагается, что точки, лежащие внутри тела дают положительное скалярное произведение. Сформировать матрицу объекта, состоящую из коэффициентов уравнений плоскостей можно несколькими методами. Один из них использует общеизвестный из аналитической геометрии принцип, что плоскость можно определить по трем неколлинеарным точкам ( хотя уравнение плоскости содержит четыре неизвестных коэффициента, его можно нормировать так, чтобы в = 1 ). Другой метод используется, если известен вектор нормали к плоскости , то есть : 2п 0 = a 2i + b Oj 2 + 0 с 2k 0 ,где 2 i,j,k 0 - единичные векторы осей X, Y, Z соответственно. Уравнение плоскости описывается формулой (6.1). Коэффицеш^ вычисляется с помощью произвольной точки на плоскости. Например, если эта точка с координатами (xl, yl, zl), то в = - (axl + byl + czl). Метод, предложенный Мартином Ньюэлом, позволяет найти как точное решение для уравнений плоскостей многоугольников, так и «наилучшее» приближение для неплоских многоугольников. Этот метод эквивалентен определению нормали в каждой вершине многоугольника с помощью векторного произведения прилежащих ребер и усреднения результатов. Коэффициенты плоскости вычисляются из следующей стстемы уравнений: а = (yi - yJ)(zi + Z J) -28- b - (zi - zj)(xi + xj) с = (xi - xj)(yi + у)),где ]=1+1,если i=3,To j=l, а коэффициент в вычисляется с помощью любой точки на плоскости. Перед реализацией алгоритма удаления невидимых линий и поверхностей для получения нужного положения синтезируемой сцены обычно проводится трехмерное видовое преобразование. Матрицы объектов преобразованной сцены можно получить или преобразованием исходных матриц объектов визуализации или вычислением новых матриц объектов, используя преобразованные вершины или другие точки объектов. Предположим, что [В] - матрица однородных координат, задающая исходные вершины объекта, [Т] - матрица видового преобразования размером 4*4. Тогда координаты преобразованных вершин опи-шуться с помощью соотношения: [ВТ] = [В][Т]; а уравнения исходных плоскостей, ограничивающих объект: где [D] - ненулевая матрица. Аналогично, уравнения преобразованных плоскосстей задаются следующим образом: [BT][VT] = [D],где [VT] - преобразованная матрица объекта. Приравнивая левые части двух последних соотношений, получаем: [BT][VT] = [B][V]. Затем преобразовываем к виду: [VT] = [Т] [V]. Таким образом, преобразованная матрица объекта получается умножением исходной матрицы объекта слева на обратную матрицу видового преобразования . -30-плоскостей (рис. ). После удаления нелицевых граней и ребер для каждого объекта выполняется самая трудоемкая часть алгоритма : проверка каждого оставщегося ребра на закрытие другими объектами. При этом использование Z - сортировки и простого минимаксного или габаритного с прямоугольной объемлющей оболочкой тестов позволяет удалить целые группы ребер и объектов. Например, все тела в сцене упорядочиваются в некоторый преоритетный список по значениям Z ближайших вершин и расстояния до наблюдателя. Тогда никакой объект из этого списка, у которого ближайшая точка находится дальше от наблюдателя, чем самая удаленная из концевых точек ребра, не может закрывать это ребро. Более того, ни одно из оставшихся тел, прямоугольная оболочка которого расположена полностью справа, слева, над или под ребром, не может экранировать это ребро. Использование этих приемов значительно сокращает число тел, с которыми нужно сравнивать каждый отрезок или ребро. Для сравнения отрезка (R1,R2) с объектом используется параметрическое представление этого отрезка: R(t) = Rl +(R2 -Rl)t , 0<=t<=l (6.2) или V = S + dt, где V - вектор точки на отрезке, S - начальная точка, a в - направление отрезка. Необходимо определить: существуют ли значения t, при которых данный отрезок или ребро невидимы. Для этого формируется другой отрезок от точки R(t) до точки наблюдения g : Q(f,t) = U = V + gf = S + dt + gf , 0<=t<=l , f>=0. Значение t указывает точку на отрезке R(t) , a f указывает точ- -31 -ку на отрезке, проведенном от точки R(t) до точки наблюдения. Фактически Q(f,t) представляет собой плоскость в трехмерном пространстве, a (f,t) определяет точку на этой плоскости. Значение f всегда положительно, ибо объекты, экранирующие R(t), могут находиться только в той части данной плоскости, которая заключена между исследуемым отрезком R(t) и точкой наблюдения. Скалярное произведение любой точки, расположенной внутри объекта, на матрицу тела положительно. Если точка лежит внутри тела, то она невидима. Следовательно, для определения невидимой части ребра, которая экранируется объектом, достаточно определить те значения f и t, для которых скалярное произведение Q(f,t) = U на матрицу объекта положительно: Н = U [VT] = S[VT] + dt[VT] + gf[VT] > 0. (6.3) Те значения t и f, для которых все значения компоненты Н положительны соответствуют невидимой части ребра. Обозначим: p = S[VT] , q = d[VT] , w = g[VT]. Тогда условие (6.3) запишется в виде: где j - номер столбца в матрице объекта. Условия (6.4) должны выполняться для всех плоскостей, ограничивающих объект, то есть для всех j. Случай, когда Hj = 0, является граничным между видимой и не-видомой частями ребра. Полагая Hj = 0 для всех плоскостей, получают систему уравнений относительно t и f, которые должны удовлетворяться одновременно. Решая эту систему уравнений, находят все значения t и f, при которых изменяется значение видимости ребра или части ребра (число возможных возможных решений при j -32-плоскостях равно j(j - 1)/2). Затем каждое решение в интервалах 0<=t<=l , f>=0, подставляется во все остальные неравенства системы (6.3) для проверки того, что условие Hj >= 0 выполнено. Поиск корректных решений производится для того, чтобы найти минимальное среди максимальных значений параметра t (t minmax) и максимальное среди минимальных значений t (t maxmin). Подставляя эти значения в уравнение (6.2) определяют видимые участки ребра на интервалах [0,t maxmin] и [t mimmax,!]. Условие экранирования ребер или отрезков ребер является простым следствием из классической задачи линейного программирования: t maxmin < t, t minmax. Решения, удовлетворяющие неравенствам Hj > 0, могут существовать и за пределами области, ограниченной условиями: 0<=t<=l и f>=0. Поэтому к системе (6.4) необходимо добавить три уравнения, описывающие эти границы: t = 0, t-1 =0 и f=0. Тогда число решений будет равно (j + 2)(j + 3)/2. Для ускорения работы алгоритма перед определением t maxmin и t minmax удаляются не только нелицевые ребра, но и полностью видимые ребра. Видимые ребра определяются на основании того, что оба конца такого ребра должны лежать между точкой наблюдения и какой-либо видимой плоскостью. При f = 0 значение U задает сам отрезок. Далее, если f = 0, то при t = 0 и t = 1 получаются концевые точки отрезка. Из соотношений (6.4) видно, что при t = 0 pj является скалярным произведением концевой точки отрезка и j - ой плоскости. Аналогично, pj + qj является скалярным произведением другой концевой точки отрезка и j-ой плоскости. В свою очередь, -33-j-я плоскость, ограничивающая объект видима, если wj <= 0. Следовательно, если wj <=0 , pj <= 0 и pj + qj <=0, то отрезок полностью видим , а оба его конца лежат либо на видимой плоскости, либо между этой плоскостью и точкой наблюдения. Для полностью невидимых ребер объекта отсутствуют простые тесты из-за бесконечности плоскостей. Поэтому полностью невидимые ребра определяют также как и частично невидимые ( в этом случае невидимый участок будет простираться от t = 0 до t = 1). После определения частично видимых или полностью невидимых ребер определяются пары объектов, связанных отношениями протыкания, (в случае протыкания объектов сцены возникают решения на границе f = 0) и вычисляются отрезки, которые образуются при протыкании объектами друг друга. Эти отрезки проверяются на экранирование всеми прочими объектами сцены. Видимые отрезки образуют структуру протыкания. Таким образом, реализация алгоритма Робертса подразделяется на следующие этапы (рис. ): 1. Определение коэффициентов уравнения плоскости каждой гра 2. Проведение видового преобразования матрицы объекта, вы 3. Определение нелицевых граней, удаление их из списка гра 4. Определение списка других объектов синтезируемой сцены, 5. Формирование списка протыканий также на основании сравне- -34- ний охватывающих оболочек объектов. 6. Определение невидимых ребер или участков ребер. Практическая реализация данного этапа основана на том, что скалярное произведение любой точки, лежащей внутри объекта на матрицу объекта положительно. 7.Формирования списка возможных ребер, соединяющих точки протыкания, для пар объектов, связанных отношением протыкания. 8.Проверка видимости полученных ребер по отношению ко всем объектам сцены в соответствии с действиями этапов 3 и 6. 9.Визуализация изображения. 6.2. АЛГОРИТМ ВАРНОКА Алгоритм Варнока работает в пространстве изображений. В основу алгоритма положен принцип «разделяй и властвуй», состоящий в разбиении области рисунка на более мелкие подобласти (окна). Для каждой подобласти (окна) определяются связанные с ней многоугольники и те из них, видимость которых определить «легко», изображаются на экране. В противном же случае разбиение повторяется, и для каждой из вновь полученных подобластей рекурсивно применяется процедура принятия решения. Предполагается, что с уменьшением размеров области ее перекрывает все меньшее и меньшее количество многоугольников. Считается, что в пределе будут получены области, содержащие не более одного многоугольника, и решение будет принято достаточно просто. Если же в процессе разбиения будут оставаться области, содержащие не один многоугольник, то следует продолжать процесс разбиения до тех пор, пока размер области не станет совпадать с одним пикселом. В этом случае для полученного пиксела необходи- -35-мо вычислить глубину (значение координаты Z) каждого многоугольника и визуализировать тот из них, у которого максимальное значение этой координаты (считаем, что наблюдатель находится на оси Z в плюс бесконечности). В процессе анализа взаимного расположения окна и многоугольника могут быть получены следующие варианты: 1) многоугольник внешний (целиком находится за пределами об 2) многоугольник внутренний (целиком лежит внутри области); 3) пересекающий многоугольник (пересекает область, т. е. одна 4) охватывающий многоугольник (область целиком лежит внутри Внешние многоугольники не оказывают влияния на принятие решения о визуализации окна. Внешняя часть пересекающего многоугольника может рассматриваться как внешний многоугольник. Внутренняя часть пересекающего многоугольника обрабатывается так же, как и внутренний многоугольник. В следующих четырех случаях можно непосредственно принять решение относительно окна и не выполнять дальнейшего его разбиения: 1. Все многоугольники являются внешними по отношению к окну; 2. Имеется только один внутренний или только один пересекаю -36- следует выполнить отсечение и результат (внутренний многоугольник) преобразовать в растровую форму. Для преобразования в растровую форму может применяться один из алгоритмов нижнего уровня или примитив, имеющийся в составе графической библиотеки языка программирования. 3. Имеется единственный охватывающий многоугольник и нет ни 4. Имеется несколько пересекающих, внутренних и охватываю Для выявления такого охватывающего многоугольника применяется следующий тест: вычисляются Z-координаты плоскостей всех охватывающих, пересекающих и внутренних многоугольников в четырех угловых точках рассматриваемой области. Если существует охватывающий многоугольник, для которого все четыре вычисленные Z -координаты больше (ближе к наблюдателю), чем любые из других вычисленных Z-координат, то этот охватывающий многоугольник лежит перед всеми другими многоугольниками в рассматриваемой области, следовательно, область закрашивается цветом охватывающего многоугольника. Проверяемое в этом случае условие является достаточным, но не необходимым, чтобы охватывающий многоугольник был расположен ближе других к наблюдателю. Если исследуемая ситуация не приводится ни к одному из этих четырех случаев, то проводится разбиение области. При этом -37-следует проверять лишь внутренние и пересекающие многоугольники. Охватывающие и внешние многоугольники для исходной области останутся таковыми по отношению и к любому из получаемых подокон. Процесс разбиения завершается, когда размер области совпадает с одним пикселом (достигается разрешение экрана). Если ни один из четырех случаев не обнаруживается и для области размером с пиксел, то вычисляется глубина в этой точке для всех многоугольников, связанных с областью (внутренних, пересекающих, охватывающих), и пиксел закрашивается цветом многоугольника с максимальной Z-координатой. Для вычисления глубины плоскости в точке с известными координатами (xl,yl) можно воспользоваться уравнением плоскости Ax+By+Cz+D=0, откуда получить Axl+Byl+D С Если же С=0, то плоскость параллельна оси Z. В этом случае глубина находится из уравнений ребер многоугольника, которые могут пересекать прямую, параллельную оси Z и проходящую через точку (xl,yl). В качестве глубины берется глубина той точки пересечения, у которой координата Z оказалась максимальной. Области удобнее брать квадратными с размерами сторон (в пикселах), представляющими степень двойки. Для выполнения этого условия можно взять область, несколько превышающую по размерам экран дисплея. При этом подобласти, лежащие за пределами экрана, анализировать не надо (чтобы не проводить ненужных вычислений). Ошибки не будет, если такие области будут проанализирова- -38- ны обычным порядком, так как при их изображении координаты не будут соответствовать допустимым и изображаться ничего не будет. Другим вариантом является разбиение относительно вершины многоугольника (если существует вершина, попадающая в область). Этим делается попытка избежать ненужных разбиений. Следует отметить, что не существует единого алгоритма Вар-нока. Конкретные реализации этого алгоритма различаются в деталях. В простейшем варианте алгоритма Варнока любое окно размером больше пиксела всегда разбивается, если оно не пусто. В этой версии алгоритма для идентификации внешних многоугольников используется простой габаритный тест с прямоугольной оболочкой для областей, размер которых больше одного пиксела. Лишь для окон размером с пиксел выполняется более сложный тест на внешность. Более сложные варианты алгоритма используют перечисленные тесты. При этом целесообразно иметь три списка многоугольников: 1)охватывающих; 2)внешних; 3)пересекающих и внутренних. При построении этих списков запоминается уровень (шаг разбиения), на котором многоугольник попал в тот или иной список. Рассмотрим тесты, позволяющие распознать тип многоугольника. Простой габаритный тест выявляет факт внешности многоугольника по отношению к прямоугольному окну на основе сравнения координат окна с координатами прямоугольной оболочки многоугольника. Если Хл, Хп - абсциссы левой и правой границ, а yh, yb - ординаты нижней и верхней границ области, a Xmin, Xmax, Ymin, Ymax - координаты аналогичных границ оболочки, то многоугольник внешний, если истинно следующее выражение: -39- (Xmin>Xn) (Хтах<Хл) (Утт>Ув) (Утах<Ун) Многоугольник будет внутренним, если его об»емлющая оболочка лежит внутри области, т.е. должно быть истинным выражение (Xmin> Хл)&(Хтах< Xn)&(Ymin> Ун)&(Утах< yb). Для определения пересекающих многоугольников можно подставить координаты вершин окна в пробную функцию, представляющую собой уравнение прямой, несущей ребро многоугольника. Эта функция имеет вид f=Ax+By+C, где А, В, С - коэффициенты уравнения прямой. Если знак этой функции не зависит от выбора вершины окна, то все его вершины лежат по одну сторону от несущей прямой и на ней нет точек пересечения с рассматриваемой областью. Если ни одно из ребер многоугольника не пересекает окна, то этот многоугольник является либо внешним, либо охватывающим окно. При проведении этого теста надо учитывать тот факт, что используется уравнение бесконечной прямой, а не конечного отрезка. Поэтому для ребра, которое может пересекаться с окном, надо дополнительно вычислить координаты точки пересечения со сторонами окна. Если полученная точка принадлежит ребру, то многоугольник пересекает окно. В противном случае он является либо внешним, либо охватывающим (внутренние многоугольники к этому моменту уже определены). На основе теста с прямоугольной оболочкой и теста с пробной функцией выявляются внутренние, пересекающие и часть внешних многоугольников. Часть внешних многоугольников (например, огибающих угол окна) не может быть отделена от охватывающих многоугольников. Поэтому требуются дополнительные тесты для -40-выявления внешних и охватывающих многоугольников (рис.). В первом тесте проводится луч из любой точки окна (удобно из вершины) в бесконечность. Затем подсчитывается количество пересечений луча с многоугольником. При четном (или равным нулю) количестве пересечений многоугольник является внешним, при нечетном - охватывающим. При прохождении луча через вершину многоугольника возникает неопределенность. Ее можно устранить, если считать касание за два пересечения, а протыкание - за одно. Во втором тесте осуществляется подсчет угла. Из произвольной точки окна (лучше из центра) проводятся лучи в начало и конец каждого ребра многоугольника. При этом находится сумма углов, образованных такими лучами для каждого ребра. Обход по ребрам многоугольника совершается по или против часовой стрелки. Полученная сумма интерпретируется следующим образом: ALFAi=0 - многоугольник внешний по отношению к окну. (ALFAi - угол, образованный лучами, проведенными в конец 1-го ребра). ALFAi=360m - многоугольник охватывает окно m раз (многоугольник без самопересечений может охватить точку только один раз). Процесс вычисления суммы можно упростить, так как нет нужды подсчитывать углы с высокой точностью (достаточно ограничиться приращениями по 45 , т.е. считать целые октанты, покрытые отдельными углами). Октанты нумеруются от 0 до 7. Они получаются, если считать стороны окна бесконечными прямыми). Число целых октантов, покрытых углом, равно разности между но- -41 -мерами октантов, в которых лежат концы его ребер. При этом ALFA= ALFA-8, если ALFA>4 ALFA= ALFA +8, если ALFA<-4 Если ALFA=+4, то сторона окна расщепляет ребро многоугольника, поэтому ребро в этом случае надо разбить на два стороной окна (в противном случае получаются одинаковые результаты для внешнего и охватывающего многоугольника). На основе суммирования вкладов отдельных ребер получим О - многоугольник внешний по отношению к окну S= ALFAi = +8m - многоугольник охватывает окноДля выпуклых тел целесообразно предварительно удалить нелицевые грани, как это делается в алгоритме Робертса. 6.3. АЛГОРИТМ ВЕЙЛЕРА-АЗЕРТОНА Алгоритм Вейлера-Азертона развивает идеи алгоритма Варнока в направлении минимизации количества шагов при разбиении окон на подокна. Основой алгоритма служит алгоритм отсечения многоугольников на плоскости тех же авторов. Для повышения точности алгоритм работает в об»ектном пространстве, выходными данными являются многоугольники, поэтому его можно использовать как для удаления невидимых линий, так и для удаления невидимых поверхностей. Алгоритм удаления невидимых поверхностей состоит из четырех шагов: -42- 1. Предварительная сортировка по глубине.В результате выполнения этого шага многоугольники упорядочиваются в порядке уменьшения максимального значения координаты Z и образуют некоторый приоритетный список. Считается, что наблюдатель располагается в бесконечности на положительной полуоси Z, поэтому многоугольник с наивысшим приоритетом окажется ближайшим к наблюдателю. В простейшем случае (если ближайший многоугольник не пересекается другими многоугольниками или полностью лежит ближе всех других многоугольников) он заслоняет все остальные многоугольники или их части. Поэтому область экрана, на которую проецируется первый многоугольник, можно закрасить цветом этого многоугольника. Поскольку самый приоритетный многоугольник может оказаться «маленьким» и не будет закрывать все остальные многоугольники, то необходимо выполнить второй шаг алгоритма. 2. Отсечение по границе ближайшего к наблюдателю многоугольника (сортировка многоугольников на плоскости).В качестве отсекателя используется копия самого приоритетного многоугольника из списка, полученного на первом шаге. Отсекаются все остающиеся в приоритетном списке многоугольники (в том числе и первый). С помощью алгоритма отсечения Вейлера-Азертона [1, с.315] проводится отсечение по границам отсекателя, в результате чего формируются два списка - внутренних и внешних многоугольников. Фактически отсечение проводится с проекциями на плоскость XOY отсекателя и отсекаемого многоугольника (двумерная операция отсечения). Часть отсекаемого многоугольника (если она есть), попавшая внутрь отсекателя, добавляется к списку внутренних -43- многоугольников. Оставшаяся часть (находящаяся за пределами от-секателя) добавляется к списку внешних многоугольников. Этот шаг представляет собой сортировку на плоскости или XY -сортировку. 3. Удаление многоульников, экранированных многоульником,
|