Заливка многоугольных областей

Разработка алгоритма заполнения ограниченных многоугольных областей цветом. Выделение левой верхней и правой нижней точек многоугольника и построение линии по двум точкам. Блок-схема организованного алгоритма. Листинг программы и снимок ее окна.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 27.04.2012
Размер файла 44,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

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

«Заливка многоугольных областей»

Цель работы: Разработать алгоритм заполнения замкнутых многоугольных форм цветом.

Алгоритм:

1. Среди вершин многоугольника выделяем левую верхнюю и правую нижнюю точки многоугольника (MinX: MinY), (MaxX: MaxY).

2. Проверяя все точки полученного прямоугольника запоминаем точку вхождения в многоугольник и точку выхода из него. По этим двум точкам проводим линию.

Ниже приведена блок-схема организованного алгоритма.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

алгоритм многоугольник заполнение

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Листинг программы:

unit ULab2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls, ShellAPI;

type

TMainForm = class(TForm)

PBox: TPaintBox; Button1: TButton; Button2: TButton; Label1: TLabel; Label2: TLabel;

procedure Button1Click(Sender: TObject);

procedure PBoxMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Button2Click(Sender: TObject);

procedure PBoxPaint(Sender: TObject);

procedure PBoxMouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

end;

var

MainForm: TMainForm;

Coords: array of TPoint;

procedure FloodFill(X, Y: Word; FloodColor: TColor; Canvas: TCanvas);

implementation

{$R *.dfm}

procedure FloodFill(X, Y: Word; FloodColor: TColor; Canvas: TCanvas);

var i, j, MinX, MaxX, MinY, MaxY: Word;

s: TPoint;

begin

if Length(Coords) < 3 then Exit; // или точек меньше 3-х то выходим из подпрограммы

// Возьмем по-умолчанию за макс. и мин. точки самую первую в массиве

MinX:= Coords[0].X;

MaxX:= Coords[0].X;

MinY:= Coords[0].Y;

MaxY:= Coords[0].Y;

// Найдем минимальные и максимальные точки многогранника

for i:= 1 to Length(Coords) - 1 do begin

if MinX > Coords[i].X then MinX:= Coords[i].X;

if MaxX < Coords[i].X then MaxX:= Coords[i].X;

if MinY > Coords[i].Y then MinY:= Coords[i].Y;

if MaxY < Coords[i].Y then MaxY:= Coords[i].Y

end;

// Теперь внутри прямоугольника (MinX, MinY, MaxX, MaxY) проверим все пиксели на принадлежность региону

// и те, которые принадлежат ему - закрасим

Canvas.Pen.Color:= clSkyBlue; // Устанавливаем цвет пера

for i:= MinX to MaxX do begin // от левого края фигуры до правого

j:= MinY; // Начинаем с верхней границы фигуры

s.X:= -1;

While j <= MaxY do begin // Пока не опустились до нижней границы фигуры

if Canvas.Pixels[i, j] = clSkyBlue then begin // Если пиксел границы

if s.X = -1 then begin // Если точка начала не назначена

s.X:= i; // Назначаем

s.Y:= j;

While Canvas.Pixels[i, j] = clSkyBlue do j:= j + 1 // Пока не дойдем до границы фигуры опускаем координату Y

end else // иначе

if s.X > -1 then begin //Если точка начала задана

Canvas.MoveTo(s.X, s.Y + 1); // Закрашиваем линию

Canvas.LineTo(i, j);

s.X:= -1 // Сбрасываем начальную точку

end

end;

j:= j + 1 // Опускаемся на пиксел ниже по оси Y

end end; end;

procedure TMainForm.Button1Click(Sender: TObject);

begin

SetLength(Coords, 0);

InvalidateRect(Handle, nil, false)

end;

procedure TMainForm.PBoxMouseDown(Sender: TObject;

Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

if Button = mbLeft then begin // Если нажата левая кнопка мыши

SetLength(Coords, Length(Coords) + 1); // Добавляем к динамическому массиву еще ячейку

Coords[Length(Coords) - 1].X:= X; // Запоминаем координату Х

Coords[Length(Coords) - 1].Y:= Y; // Запоминаем координату Y

InvalidateRect(Handle, nil, false) // Вызываем отрисовку формы

end

else

if Button = mbRight then begin // Если нажата правая кнопка мыши

FloodFill(X, Y, clSkyBlue, PBox.Canvas); // Вызываем заливку

SetLength(Coords, 0); // Очищаем динамический массив

end

end;

procedure TMainForm.Button2Click(Sender: TObject);

var i: Byte;

begin

if Length(Coords) < 3 then begin

Application.MessageBox('Нужно как минимум три точки', 'Внимание', MB_OK or MB_ICONWARNING);

Exit

end;

with PBox.Canvas do begin

Pen.Color:= clSkyBlue; // Цвет кисти - небесно-синий

MoveTo(Coords[0].X, Coords[0].Y); // Устанавливаем кисть в первую точку

for i:= 1 to Length(Coords) - 1 do

LineTo(Coords[i].X, Coords[i].Y); // Выводим линии поочередно от точки к точке

LineTo(Coords[0].X, Coords[0].Y) // Проводим линию из последней точки к первой

end end;

procedure TMainForm.PBoxPaint(Sender: TObject);

var i: byte;

begin

PBox.Canvas.Brush.Color:= clBlack;

PBox.Canvas.FillRect(PBox.ClientRect);

if Length(Coords) = 0 then Exit;

for i:= 0 to Length(Coords) do

PBox.Canvas.Pixels[Coords[i].X, Coords[i].Y]:= clWhite

end;

procedure TMainForm.PBoxMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

begin

Label2.Caption:= IntToStr(x) + ': ' + IntToStr(Y)

end;

end.

Снимок окна программы:

Вывод: При выполнении данной работы были изучены некоторые алгоритмы заполнения ограниченных многоугольных областей.

Размещено на Allbest.ru


Подобные документы

  • Постановка задачи и ее математическая модель. Блок-схема алгоритма обработки массивов координат точек. Тестирование алгоритма сортировки. Используемые глобальные и локальные переменные. Листинг программы на языке Си. Анализ результатов. Пример работы.

    курсовая работа [1,8 M], добавлен 08.11.2012

  • Алгоритмы растровой графики (построчное заполнение, сортировка методом распределенного расчета, заливка области с затравкой) и векторной графики (заливка основным цветом, изображением-узором, текстурная, градиентная). Процедура заполнения областей экрана.

    курсовая работа [165,4 K], добавлен 22.06.2011

  • Разработка алгоритма решения задачи численного интегрирования методом трапеции. Словесное описание и блок-схема разработанного алгоритма программы. Описание интерфейса, главного окна и основных форм программы. Проверка работоспособности программы.

    курсовая работа [1,4 M], добавлен 16.03.2012

  • Изучение понятия и свойств алгоритма. Определение сущности технологии Robson. Исполнитель, а также блок-схема алгоритма или его графическое представление, в котором он изображается в виде последовательности связанных между собой функциональных блоков.

    реферат [155,9 K], добавлен 19.10.2013

  • Этапы процедуры принятия решений. Разработка математического алгоритма. Блок-схема алгоритма работы программы. Разработка программы на языке программирования С++ в среде разработки MFC. Текст программы определения технического состояния станка с ЧПУ.

    курсовая работа [823,0 K], добавлен 18.12.2011

  • Переменные типа integer, real, их функции. Общее понятие о массиве, файлы для Pascal. Информационный и информанизационный набор списка. Реализация и тестирование программы. Выбор базы данных, внесение имени, меню. Блок-схема алгоритма, листинг программы.

    курсовая работа [306,0 K], добавлен 04.02.2013

  • Основные аналитические соотношения. Блок схемы и алгоритм решения задачи. Проверка работоспособности алгоритма вручную. Таблица идентификации переменных. Формы входной и выходной печати. Разработка и отладка программы. Инструкция для работы с программой.

    курсовая работа [69,8 K], добавлен 13.02.2012

  • Методика разработки, практической апробации программы в среде Turbo Pascal по построению графика прямой линии регрессии. Формирование блок-схемы данной программы, ее листинг. Построение графика с помощью математических формул и графического модуля Graph.

    контрольная работа [46,2 K], добавлен 22.07.2011

  • История создания и развитие языка программирования Pascal, его версии. Особенности и порядок построения графика функции на языке Turbo Pascal с использованием декартовой системы координат. Блок схема алгоритма процедур, листинг и тестирование программы.

    курсовая работа [102,7 K], добавлен 23.12.2011

  • Составление алгоритма и разработка в среде программирования Delphi 7 программы, вычисляющей макроэкономические индексы цен. Реализация программы в виде 4 форм и 1 диалогового окна. Описание алгоритма решения задачи. Текст программы, руководство оператора.

    курсовая работа [1,4 M], добавлен 04.06.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.