Урок 3 Моделирование в среде графического редактора
Представление о моделировании в среде графического редактора
Некоторые думают, что использование моделей началось недавно. Однако само по себе моделирование старо как мир. Оно появилось тогда, когда человечество осознало свое место в окружающем мире и стало стремиться к пониманию и изменению его.
Одной из разновидностей моделей являются геометрические модели. Они передают внешние признаки объекта: размеры, форму, цвет. Геометрические модели представляют собой некоторые объекты, геометрически подобные своему прототипу (оригиналу). Они служат, в основном, для учебных и демонстрационных целей, используются при проектировании сооружений, конструировании различных устройств и изделий. Простейшие модели такого типа окружают вас с раннего детства — это игрушки. С возрастом вы сталкиваетесь со все более сложными геометрическими моделями. Изучая биологию, вы пользуетесь чучелами или макетами животных, скелетом человека с шарнирами вместо суставов для демонстрации движения рук и ног. Макет здания, корабля, скульптура, рисунок — все это геометрические модели. Приступая к созданию таких моделей, следует выделить объект, определить цели моделирования, сформировать информационную модель объекта в соответствии с поставленной целью и выбрать инструмент моделирования.
В среде графического редактора, который является удобным инструментом для построения геометрических моделей, мы создаем графические объекты — рисунки. Любой рисунок, с одной стороны, является моделью некоторого оригинала (реального или мысленного объекта), а с другой стороны — объектом среды графического редактора.
В среде графического редактора очень важно научиться создавать обобщенную информационную модель графического объекта, которая представлена в таблице 1.1.
Таблица 1.1. Информационная модель графического объекта
Как видно из таблицы, важнейшими характеристиками, отражаемыми в геометрической модели объекта, являются размеры и пропорции. Для построения компьютерных моделей следует решить следующие задачи:
♦ моделирование геометрических операций, обеспечивающих точные построения в графическом редакторе; ♦ моделирование геометрических объектов с заданными свойствами, в частности, формой и размерами.
В этом разделе вы познакомитесь с разнообразием геометрических моделей, создаваемых в графическом редакторе, и сферами применения этих моделей. Геометрические модели отличает простота и наглядность, а среда, которая выбрана для моделирования, доступна даже неподготовленному пользователю.
При создании геометрических моделей следует придерживаться этапов моделирования, рассмотренных в учебнике «Информатика. Базовый курс. Теория» в разделе «Информационная картина мира». Соблюдение этих этапов — гарантия достижения цели. Иногда опыт, здравый смысл и знания помогут вам легко решить любую проблему без детального описания этапов моделирования.
Моделирование геометрических операций и фигур
ЗАДАЧА 1.1. Моделирование геометрических операций
I этап. Постановка задачи
ОПИСАНИЕ ЗАДАЧИ
Вся история геометрии связана с практикой построений при помощи подручных средств для измерения недоступного. В Древнем Египте, задолго до доказательства Пифагором его знаменитой теоремы, использовали треугольник со сторонами, соотносящимися как 3:4:5, для получения прямых углов в строительстве. Фалесу Милетскому, жившему в VI в. до н. э., приписывается метод измерения расстояния до кораблей, находящихся в море, с использованием признаков подобия треугольников.
К задачам, поставленным еще в древности, относятся задачи деления отрезков и углов на две равные части. Их решение было известно еще в догреческий период (V в. до н. э.).
Построения в графическом редакторе и на листе бумаги несколько отличаются, потому что компьютерные инструменты не совсем идентичны привычным, повседневным. Например, графический редактор не имеет линейки, в нем нет инструмента, подобного транспортиру, в окружности, нарисованной в графическом редакторе, не определен центр. Поэтому необходимо научиться строить модели геометрических операций: деление отрезка и угла на равные части, определение центра окружности и др. Это можно сделать, используя законы геометрии.
ЦЕЛЬ МОДЕЛИРОВАНИЯ
При отсутствии специальных инструментов (линейки, транспортира, циркуля) смоделировать основные геометрические операции.
ФОРМАЛИЗАЦИЯ ЗАДАЧИ
Исходные геометрические объекты (отрезок, радиус, угол) задаются в левом верхнем углу рабочего поля. Для построений используются их копии. Построение основывается на законах геометрии.
II этап. Разработка модели
МОДЕЛЬ 1. Деление отрезков (моделирование функций линейки)
Алгоритм деления отрезка пополам приведен на рисунке 1.1. Построение основано на том, что высота в равнобедренном треугольнике является одновременно биссектрисой и медианой. Для построения достаточно инструмента Линия и клавиши Shift.
Алгоритм деления отрезка на n равных частей (для n = 3) приведен на рисунке 1.2. Для выполнения операции деления используется отрезок произвольной длины х. Построение основано на подобии треугольников. Параллельность линий достигается копированием.
МОДЕЛЬ 2. Построение окружности заданного радиуса и определение ее центра (моделирование функций циркуля)
Окружность в графическом редакторе вписывается в квадрат со стороной, равной удвоенному радиусу. Алгоритм построения окружности изображен на рисунке 1.3.
МОДЕЛЬ 3. Деление угла пополам (моделирование функции транспортира)
На рисунке 1.4 приведен один из вариантов алгоритма деления.
В качестве дополнительного построения используется окружность любого радиуса. В ее центр помещается копия угла, подлежащего делению. Углы АОВ и АСВ относятся как 2:1 (докажите это). Отсюда, если линия DO параллельна линии АС, то она является биссектрисой заданного угла. Построение сводится к копированию части отрезка АС и установке его копии к точке О. Полученная параллельная линия DO разделит заданный угол пополам.
III этап. Компьютерный эксперимент
ПЛАН ЭКСПЕРИМЕНТА
1. Тестирование построенной по заданному алгоритму модели 1 совмещением отрезков, полученных при делении.
2. Тестирование построенной по заданному алгоритму модели 2 совмещением исходного и повернутого на 90° отрезка с радиусами полученной окружности.
ПРОВЕДЕНИЕ ИССЛЕДОВАНИЯ
Докажите правильность алгоритмов построения.
IV этап. Анализ результатов
Если результаты тестирования отрицательные, увеличить точность выполнения алгоритма за счет работы в увеличенном масштабе (под лупой).
ЗАДАЧА 1.2. Моделирование объектов с заданными геометрическими свойствами
I этап. Постановка задачи
ОПИСАНИЕ ЗАДАЧИ
Задачи на построение возникли в глубокой древности и были связаны с практическими потребностями. Примеры из истории развития геометрии свидетельствуют, что можно добиться точности, даже если под рукой нет специальных измерительных инструментов, а есть подсобные предметы: кусок веревки, ровная палочка и т. п.
Поэтому необходимо научиться строить модели геометрических фигур с заданными свойствами: равносторонний треугольник, шестиугольник, равнобедренный треугольник и пр. Это можно сделать, используя законы геометрии.
ЦЕЛЬ МОДЕЛИРОВАНИЯ
В среде графического редактора научиться моделировать геометрические объекты с заданными свойствами.
ФОРМАЛИЗАЦИЯ ЗАДАЧИ
Геометрическая фигура характеризуется длиной сторон и углами, которые необходимо задать в виде отрезков и углов на рабочем поле графического редактора перед началом построения.
II этап. Разработка модели
МОДЕЛЬ 4. Построение равностороннего треугольника с заданной стороной
Данный алгоритм предложил Евклид в IV в. до н. э. Построить треугольник по алгоритму, приведенному на рисунке 1.5, и доказать, что полученный треугольник действительно правильный.
МОДЕЛЬ 5. Построение правильного шестиугольника с заданной стороной
Используя свойство правильных фигур вписываться в окружность и то, что сторона равностороннего шестиугольника равна радиусу описанной окружности, выполнить построение по алгоритму на рисунке 1.6.
Начать построение окружности с радиусом, равным заданной стороне шестиугольника.
III этап. Компьютерный эксперимент
ПЛАН ЭКСПЕРИМЕНТА
1. Тестирование построенной по заданному алгоритму модели совмещением с исходными отрезками и углами.
2. Построение и тестирование модели по собственному алгоритму с теми же исходными данными.
3. Исследование и анализ двух алгоритмов построения с целью определения наилучшего.
ПРОВЕДЕНИЕ ИССЛЕДОВАНИЯ
1. Докажите правильность приведенного и собственного алгоритмов для каждой модели.
2. Совместите построения, выполненные по разным алгоритмам.
IV этап. Анализ результатов
Если при совмещении фигуры не совпали, то изменить алгоритм построения или увеличить точность выполнения алгоритма за счет работы в увеличенном масштабе (под лупой). Если совпали, то выберите наиболее удобный алгоритм.
ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ
1.3. Построить равнобедренный треугольник по заданному основанию а и высоте h по нижеприведенному или собственному алгоритму. Высота в равнобедренном треугольнике одновременно является и медианой. Построение сводится к повороту отрезка, задающего высоту, на 90° и к делению отрезка, задающего основание, пополам. Алгоритм построения представлен на рисунке 1.7.
1.4. Построить прямоугольный треугольник по гипотенузе и катету. Построение произвести по нижеприведенному или собственному алгоритму. Угол, вписанный в окружность и опирающийся на диаметр, равен 90°. Приведенный на рисунке 1.8 алгоритм основан на построении двух окружностей: с диаметром, равным заданной гипотенузе, и с радиусом, равным заданному катету.
1.5. Построить равнобедренный треугольник по боковой стороне и углу при вершине. Построение произвести по собственному алгоритму.
1.6. Построить треугольник по трем сторонам.
1.7. Построить правильный восьмиугольник с заданной стороной.
1.8. Построить треугольник по двум сторонам и углу между ними.
1.9. Построить параллелограмм по заданным сторонам и острому углу.
Практическая работа по теме «Моделирование геометрических операций»
Практическая работа № 1.
«Моделирование геометрических операций и фигур».
Цель:
При отсутствии специальных инструментов (линейки, транспортира, циркуля) смоделировать основные геометрические операции.
Ход работы:
Исходные геометрические объекты (отрезок, радиус, угол) задаются в левом верхнем углу рабочего поля произвольно. Для построений используются их копии. Построение основывается на законах геометрии.
МОДЕЛЬ 1. Деление отрезков (моделирование функций линейки)
МОДЕЛЬ 2. Построение окружности заданного радиуса и определение ее центра (моделирование функций циркуля)
МОДЕЛЬ 3. Деление угла пополам (моделирование функции транспортира)
Моделирование объектов с заданными геометрическими свойствами.
МОДЕЛЬ 4. Построение равностороннего треугольника с заданной стороной
МОДЕЛЬ 5. Построение правильного шестиугольника с заданной стороной
Решение:
Для построения моделей можно использовать графический редактор PAINT
Содержимое разработки
Практическая работа №1 по теме «Моделирование геометрических операций и фигур»
ЗАДАЧА 1.1. Моделирование геометрических операций
I этап. Постановка задачи
Вся история геометрии связана с практикой построений при помощи подручных средств для измерения недоступного. Построения в графическом редакторе и на листе бумаги несколько отличаются, потому что компьютерные инструменты не совсем идентичны привычным, повседневным. Поэтому необходимо научиться строить модели геометрических операций: деление отрезка и угла на равные части, определение центра окружности и др. Это можно сделать, используя законы геометрии.
При отсутствии специальных инструментов (линейки, транспортира, циркуля) смоделировать основные геометрические операции.
Исходные геометрические объекты (отрезок, радиус, угол) задаются в левом верхнем углу рабочего поля. Для построений используются их копии. Построение основывается на законах геометрии.
II этап. Разработка модели
МОДЕЛЬ 1. Деление отрезков (моделирование функций линейки)
Алгоритм деления отрезка пополам приведен на рисунке 1.1. Построение основано на том, что высота в равнобедренном треугольнике является одновременно биссектрисой и медианой. Для построения достаточно инструмента Линия и клавиши Shift.
Для выполнения модели:
Задайте отрезок произвольной величины. Выберете инструмент линия и зажмите клавишу Shift (Рис 1).
Таким же образом начертите линю под углом примерно 45 о (Рис. 2)
С помощью инструмента Выделение (предварительно выбрав прозрачное выделение) (Рис.3) Выделите наклонную линию, скопируйте ее (ctrl+C) и вставьте (ctrl+V) в свободное место рабочей области.
С помощью выбрать отразить по горизонтали скопированную линию и добавить ее к русунку, чтобы получился треугольник (рис 5)
Теперь воспользовавшись тем, что высота в равнобедренном треугольнике является одновременно биссектрисой и медианой. Проведите высоту и с помощью ластика уберите лишние линии (рис 5,6)
Алгоритм деления отрезка на n равных частей (для n=3) приведен на рисунке 1.2. Для выполнения операции деления используется отрезок произвольной длины х. Построение основано на подобии треугольников. Параллельность линий достигается копированием.
Самостоятельно постройте модель решения данной задачи в среде графического редактора Paint.
МОДЕЛЬ 2. Построение окружности заданного радиуса и определение ее центра (моделирование функций циркуля)
Окружность в графическом редакторе вписывается в квадрат со стороной, равной удвоенному радиусу. Алгоритм построения окружности изображен на рисунке 1.3.
III этап. Компьютерный эксперимент
Тестирование построенной по заданному алгоритму модели 1 совмещением отрезков, полученных при делении.
Тестирование построенной по заданному алгоритму модели 2 совмещением исходного и повернутого на 90? отрезка с радиусами полученной окружности.
Докажите правильность алгоритмов построения.
IV этап. Анализ результатов
Если результаты тестирования отрицательные, увеличить точность выполнения алгоритма за счет работы в увеличенном масштабе (под лупой).
Структурная разработка заданной геометрической формы
Под геометрическими примитивами понимают тот базовый набор геометрических фигур, который лежит в основе всех графических построений, причем эти фигуры должны образовывать «базис» в том смысле, что ни один из этих объектов нельзя построить через другие. Однако вопрос о том, что включать в набор геометрических примитивов, нельзя считать окончательно решенным в компьютерной графике. Например, количество примитивов можно свести к некоему минимуму, без которого нельзя обойтись, и этот минимум сводится к аппаратно реализованным графическим объектам. В этом случае базисный набор ограничивается отрезком, многоугольником и набором литер (символов).
Другая точка зрения состоит в том, что в набор примитивов необходимо включить гладкие кривые различного рода (окружности, эллипсы, кривые Безье), некоторые классы поверхностей и даже сплошные геометрические тела. В качестве трехмерных геометрических примитивов в таком случае предлагаются пространственные кривые, параллелепипеды, пирамиды, эллипсоиды. Но если такой расширенный набор примитивов связан с аппаратной реализацией, то возникает проблема перенесения программных приложений с одного компьютера на другой, поскольку такая аппаратная поддержка существует далеко не на всех графических станциях. Кроме того, при создании трехмерных геометрических примитивов программисты сталкиваются с проблемой их математического описания, а также разработки методов манипулирования такими объектами, поскольку те типы объектов, которые не попали в список базовых, надо уметь приближать с помощью этих примитивов.
Во многих случаях для аппроксимации сложных поверхностей используются многогранники, но форма граней может быть различной. Пространственный многоугольник с числом вершин больше трех не всегда бывает плоским, а в этом случае алгоритмы изображения многогранников могут привести к некорректному результату. Поэтому программист должен сам позаботиться о том, чтобы многогранник был описан правильно. В этом случае оптимальным выходом из положения является использование треугольников, поскольку треугольник всегда является плоским. В современной графике это, пожалуй, самый распространенный подход.
Но существует и альтернативное направление, которое называется конструктивной геометрией тел. В системах, использующих этот подход, объекты строятся из объемных примитивов с использованием теоретико- множественных операций (объединение, пересечение).
Любая графическая библиотека определяет свой набор примитивов. Так, например, широко распространенная интерактивная система трехмерной графики OpenGL включает в список своих примитивов точки (вершины), отрезки, ломаные, многоугольники (среди которых особо выделяются треугольники и четырехугольники), полосы (группы треугольников или четырехугольников с общими вершинами) и шрифты. Кроме того, в нее входят и некоторые геометрические тела: сфера, цилиндр, конус и др.
Понятно, что для изображения таких примитивов должны быть разработаны эффективные и надежные алгоритмы, поскольку они являются конструктивными элементами. Исторически сложилось так, что первые дисплеи были векторными, поэтому базовым примитивом был отрезок. Но, как уже было отмечено в первой главе нашего курса, самая первая интерактивная программа Sketchpad А.Сазерленда в качестве одного из примитивов имела прямоугольник, после чего этот объект уже традиционно входил в различные графические библиотеки.
Здесь мы рассмотрим такие примитивы, как вершина, отрезок, воксель и модели, строящиеся на их основе, а такжефункциональные модели.
Полигональные модели
В современной компьютерной графике векторно-полигональная модель является наиболее распространенной. Она применяется в системах автоматизированного проектирования, компьютерных играх, тренажерах, ГИС, САПР и т. д. Достоинства этой модели заключаются в следующем:
К числу недостатков полигональных моделей можно отнести то, что алгоритмы визуализации выполнения топологических операций (например, построение сечений) довольно сложны. Кроме того, аппроксимация плоскими гранями приводит к значительной погрешности, особенно при моделировании поверхностей сложной формы.
Воксельные модели
Положительными чертами воксельной модели являются:
К ее недостаткам относятся:
Поверхности свободных форм (функциональные модели)
Этот подход будет более подробно изложен в следующих главах.
В нашем курсе предполагается рассмотреть растровые алгоритмы для изображения таких геометрических примитивов, как отрезки, многоугольники, окружности и эллипсы. Но сначала мы займемся тем геометрическим аппаратом, который позволит адекватно описывать объекты в пространстве, работать с ними и формировать изображение.
Системы координат: мировая, объектная, наблюдателя и экранная
Видимый образ формируется на некоторой плоскости, которую в дальнейшем будем называть картинной плоскостью. Способы преобразования трехмерного объекта в двумерный образ ( проекции ) могут быть различными. Так или иначе, но полученный образ также должен быть описан в некоторой двумерной системе координат. В зависимости от способа его получения реальные размеры образа также могут быть различны. Различные виды проецирования будут подробно рассмотрены в последующих главах.
Поскольку нашей конечной целью является получение изображения на экране, то перенесение образа сопровождается изменением масштаба в соответствии с размерами экрана. Обычно началом координат в системе координат образа считается левый нижний угол листа с изображением. На экране дисплея начало координат традиционно находится в левом верхнем углу. Отображение рисунка с картинной плоскости на экран должно производиться с минимальным искажением пропорций, что само по себе вносит ограничение на область экрана, занимаемую рисунком. Изменение масштаба должно осуществляться с сохранением пропорций области (рис. 4.4).
Объекты в системе координат картинной плоскости задаются в каких- либо единицах измерения, причем масштаб одинаков по обеим осям координат. На экране единицей измерения является пиксель, который следует рассматривать как прямоугольный, поэтому масштабы по горизонтальной и вертикальной осям могут быть различны, что необходимо учитывать при задании коэффициентов масштабирования.
Рассмотрим ситуацию, когда изображение занимает на картинной плоскости прямоугольную область . При отображении рисунка на экран каждая точка исходного прямоугольника с координатами перейдет в некоторую точку с целочисленными координатами . Введем обозначения:
Однородные координаты. Задание геометрических преобразований в однородных координатах с помощью матриц
В предыдущей главе описывались геометрические преобразования на плоскости и в пространстве, а также было показано, как можно использовать аппарат матриц для таких задач. Для преобразований на плоскости применялись двумерные векторы и матрицы размерностью . В пространстве, соответственно, с этой же целью использовались трехмерные векторы и матрицы . Но такой подход не позволяет задавать с помощью матриц преобразования переноса и проекции. В связи с этим в проективной геометрии был разработан аппарат, позволяющий унифицировать все геометрические преобразования путем введения так называемых однородных координат.
Для пояснения такого подхода сначала рассмотрим случай двумерного пространства. Каждая точка плоскости с координатами может одновременно рассматриваться как точка трехмерного пространства с координатами , т.е. как точка, лежащая на плоскости . С другой стороны, каждой точке трехмерного пространства при условии соответствует единственная точка этой же плоскости . При этом получается, что каждой точке плоскости соответствует прямая, проходящая через начало координат, т. е. устанавливается взаимно однозначное соответствие между точками плоскости и множествами .
Если теперь рассматривать точку плоскости как принадлежащую трехмерному пространству, то ее двумерные преобразования можно будет описывать с помощью матриц , причем можно будет задавать таким способом не только повороты и масштабирование, но и сдвиги и проекции (как ортографические, так и центральные).
Поворот на угол относительно начала координат можно осуществить с помощью новой матрицы поворота:
Перейдем теперь к трехмерному пространству. Каждой точке будем ставить в соответствие точку четырехмерного пространства , а для выполнения основных преобразований будем использовать матрицы размерностью . Строятся они совершенно аналогично тому, как это делалось в двумерном случае. Матрица сдвига на вектор имеет вид
Матрица поворота относительно оси на угол выглядит следующим образом:
Путем объединения приведенных элементарных преобразований можно построить и более сложные. В третьей главе мы использовали произведение простых матриц вращения для построения матрицы поворота относительно произвольной оси. Приведем один пример.
Каждое из этих преобразований реализуется с помощью матрицы, а полное преобразование можно выполнить, используя произведение матриц.
Использование матриц очень удобно для выполнения преобразований в пространстве, хотя в некоторых случаях это приводит к избыточному числу выполняемых операций. Например, поворот одной точки в пространстве относительно координатной оси с помощью матриц в однородных координатах требует 16 операций умножения и 12 операций сложения. В то же время он легко может быть выполнен с помощью формул преобразования