Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ахмедгариев отчет КГ 2.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
362 Кб
Скачать
☆
  1. Описание структуры и алгоритма программы

Основной модуль

Разработанная структура имеет структуру, изображенную на рис.3.1.

Задание 1

Задание 2

Лабораторная 1

Задание 3

Математический модуль

ЦДА

Лабораторная 2

Брезенхема

Окружность брезенхема

Несимметричный ЦДА

Выбор стиля

Рис.Фигуру

Рисунок 3.1. Структура программы

Основной алгоритм программного модуля.

В зависимости от выбранной программы, в главном окне выбираются либо примеры, либо лабораторные работы (см. рис.5.1.).

При выборе необходимой программы запускается форма данного проекта.

  1. Описание основных процедур и функций

Алгоритмы

Все элементы рисуем при помощи одной процедуры и при использовании case:

procedure TForm3.Button3Click(Sender: TObject);

  1. Нарисовать точку, используя стиль линии

procedure PixelSize(X,Y : Integer);

x, y – координата точки – «пикселя», в зависимости от толщины линии, выводит объект «уголок» с заданной шириной.

procedure PixelStyle(X, Y: Integer);

x, y – координата точки – «пикселя», в зависимости от вида и толщины линии, выводит или не выводит объект «крест» с заданной шириной задействует процедуру PixelSize

  1. Обычный ЦДА

Цифровой дифференциальный анализатор

С помощью ЦДА решается дифференциальное уравнение отрезка:

dY/dX= dy / dx

где

dx := xk - xn; приращение координат отрезка по оси Y

dy := yk - yn; приращение координат отрезка по оси X

Установим начальные значения:

xt := xn;

yt := yn;

где

(xn, yn) – координаты начальной точки,

(xk, yk) – координаты конечной точки, полученные в качестве параметров функции:

Case linetype of 1:

Определим количество узлов N, используемых для аппроксимации отрезка.

n := abs(dx) + abs(dy);

Затем за n циклов вычисляются координаты очередных узлов:

xt := xt + dx / n;

yt := yt + dy / n;

Получаемые значения xt, yt преобразуются в целочисленные значения координаты очередного пиксела округлением

PixelStyle(round(xt), round(yt));

На каждом шаге цикла выводим получившийся пиксель, используя стиль пера.

  1. Несимметричный ЦДА;

Case linetype of 2

(xn, yn) – координаты начальной точки,

(xk, yk) – координаты конечной точки

Процедура осуществляющая рисование отрезка по алгоритму несимметричного ЦДА.

  1. Case linetype of 3:

procedure brezenhem(xn, yn, xk, yk: Integer);

(xn, yn) – координаты начальной точки,

(xk, yk) – координаты конечной точки

Процедура осуществляющая рисование отрезка по алгоритму Брезенхема.

  1. Генерация окружности

Case Linetype of 4:

xn, yn – центр окружности, r – радиус.

Процедура осуществляющая рисование окружности по алгоритму Брезенхема.

Интерфейс

  1. Очистка экрана

Procedure TForm3.Button1Click(Sender: TObject);

  1. Изменение толщины линии

procedure TFormLab2.ComboBox1Change(Sender: TObject);

  1. Изменение вида линии

procedure TFormLab2.ComboBox2Change(Sender: TObject);

  1. Рисуем фигуру

procedure TForm3.Button3Click(Sender: TObject);

  1. Установка начальной координаты

procedure TFormLab2.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton);

установка значений - xn, yn

  1. Определение второй координаты, выбор процедуры обработки и нарисования отрезка

procedure TFormLab2.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton);

установка значений - xк, yк