ДонНТУ > Портал магистров ДонНТУ

ГРАФИЧЕСКИЙ РЕДАКТОР ДЛЯ РАБОТЫ С ПАРАМЕРИЗОВАНЫМИ ДВУХМЕРНЫМИ ОБЪЕКТАМИ


Карабчевский В.В., Хлепитько И.В.

Донецкий национальный технический университет

Інформатика та комп'ютерні тенхнології - 2007 / Матеріали ІІІ науково-технічної конференції молодих учених та студентів. - Донецьк, ДонНТУ - 2007. - 550с.;іл., с. 278-280

В данном докладе рассматривается создание двухмерного графического редактора для работы с тремя двумерными геометрическими объектами – линией, окружностью и эллипсом. В процессе работы были разработаны и реализованы алгоритмы создания, перемещения, модификации объектов с использованием привязок, панорамирования и зумирования изображения, а также реализовано сохранение объектов в формате dxf [1], что позволяет переносить изображение с одного компьютера на другой и просматривать сцену с помощью таких систем как AutoCAD и т.д. Рассматриваемая программа может быть использована как обучающая при решении задач начертательной геометрии. С ее помощью можно создавать, модифицировать и удалять объекты на плоскости, используя при этом уже заданные параметры. Интерфейс программы прост, интуитивно понятен и похож на интерфейс широко известной программы AutoCAD, что значительно ускоряет процесс адаптации у пользователей, использовавших вышеупомянутую среду разработки.

1. Структуры данных

Для хранения данных об объектах используется специальная структура TGrObj, которая содержит списки основных графических элементов (линий, окружностей, эллипсов) и процедуры их обработки. Использование списков позволяет динамически создавать объекты, не ограничивая их число конкретным значением. Элементы списка для каждого типа объекта содержат информацию о цвете, толщине, стиле объекта и точки, которыми он задается. Координаты концов отрезков, центров окружностей, эллипсов задаются в мировых координатах при создании этих объектов пользователем и могут изменяться при модификации параметров объектов, их переносе либо повороте. Модификация объектов с использованием привязок показана на рис. 1:

Рис.1 Модификация объектов

Рис.1 Модификация объектов

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

2. Алгоритмы зумирования, панорамирования и поворота

Программа может находиться в одном из нескольких фиксированных состояний. В зависимости от текущего состояния программа будет определенным образом реагировать на действия пользователя. Каждое состояние определяется конкретными значениями специальных атрибутов-флагов. Значения этих атрибутов задаются пользователем путем выбора одной из функций программы. После этого выбора пользователь получает приглашение на ввод исходных данных, необходимых для реализации выбранной им функции. Среди состояний можно выделить следующие: ожидание, рисование пользователем линии, окружности или эллипса, модификация уже созданных объектов, зумирование, панорамирование и поворот. Особого внимания заслуживают последние три состояния.

При зумировании фактически происходит визуальное растяжение объектов относительно выбранной пользователем точки через определенный коэффициент. Координаты объектов не изменяются, меняется лишь масштаб их отображения. В этом состоянии программа ожидает нажатия пользователем левой кнопки мыши. Пока эта кнопка зажата, происходит подсчет смещения курсора по вертикали, коэффициента сжатия и, в зависимости от направления перемещения, происходит растяжение либо сжатие.

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

В состоянии поворота программа ожидает задания пользователем точки, вокруг которой будет происходить поворот, а также угла поворота, либо второй точки, которая вместе с первой будут определять линию на плоскости. В этом случае угол наклона данной линии относительно горизонтальной оси и будет углом поворота. Для реализации поворота объектов используются аффинные преобразования на плоскости [2]. Процесс поворота объектов показан на рис. 2:

Рис.2 Поворот объектов

Рис.2 Поворот объектов

3. Привязки

При работе в данной программе можно упростить процесс построения чертежей путем использования привязок. При включенной опции «OSNAP» программа определяет близлежащие от курсора точки пересечения объектов, центров и концов отрезков, центров окружностей и эллипсов. При желании пользователем могут быть выбраны лишь те привязки, которые ему необходимы для решения той или иной задачи. Привязки могут быть использованы в таких состояниях программы как рисование объектов, их модификация и поворот. Привязки к концу и середине отрезков, центрам окружностей и эллипсов реализуются достаточно просто и не заслуживают особого внимания. Более детально следует рассмотреть привязки к пересечению объектов. Отыскание точек пересечения двух объектов происходит путем решения системы уравнений, описывающих эти объекты.

В случаях, когда одним из объектов является отрезок или при пересечении двух окружностей, система уравнений имеет простой вид и легко решается. Эти решения можно легко запрограммировать и вычисление их практически не влияет на быстродействие программы. Кроме того, в таких случаях целесообразно переносить систему координат таким образом, чтобы ее начало совпадало с центром окружности или эллипса, если функции этих элементов входят в пару рассматриваемых объектов. Это упрощает вывод формул для нахождения точек пересечения объектов и ускоряет подсчет программой координат этих точек. Некоторые сложности возникают при отыскании точек пересечения окружностей с эллипсами и эллипсов между собой. Решение простой с виду системы уравнений (3.1), полученное с помощью пакета ”Mathematica”, насчитывает порядка нескольких тысяч символов. Частое вычисление таких объемных выражений может ощутимо затормаживать работу приложения. Система уравнений (3.1) описывает пересечение эллипса и окружности. При нахождении точек пересечения эллипсов задача только усложняется. Перенос системы координат таким образом, чтобы ее начало совпадало с центром эллипса, немного упрощает задачу, но решение все равно остается слишком громоздким и не может быть использовано.

Пересечение окружниости и эллипса

Для решения этой задачи стоит использовать итерационные методы, которые путем аппроксимации позволяют найти с определенной точностью координаты точек пересечения. Можно использовать такой алгоритм: разбиение одного из объектов на промежутки, каждый из которых заменяется линией. Нахождение тех линий, которые пересекаются со вторым из рассматриваемых объектов и если длина найденных линий превышает заданную точность, то повторить разбиение, но уже для тех участков элемента, которые соответствуют найденным линиям. Фактически, необходимо найти участок, на котором имеет место пересечение объектов, и сузить его до необходимых нам пределов.

Литература

1. Зоммер В. AutoCAD – 2007. Руководство чертежника, конструктора, архитектора. – М.: ООО «Бином – Пресс», 2007г. – 816с.

2. Е.В. Шишкин, А.В. Боресков – Компьютерная графика. Полигональные модели. – М.: ДИАЛОГ – МИФИ, 2001. – 464с.