Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 05.07.2020
Сообщений: 12

Реализация алгоритмов растровой графики для заполнения сплошных областей

06.10.2020, 18:16. Показов 1612. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста, с лабораторной работой.
Описание алгоритма:
Дано : Pop(x,y) -процедура извлечения из стека координат (x,y) очередного пиксела
Push(x,y) - процедура помещения в стек координат (x,y) очередного пиксела
Нарисовать_точку(x,y,col) - процедура для подкрашивания цветом col пиксела с координатами(x,y)
с(x,y) - цвет пиксела с координатами (x,y)
cb - цвет для подкрашивания пикселов границы области
ci - цвет для подкрашивания пикселов внутри области
(х0,y0) - координаты затравочного пиксела
Получить : Перекрасить сплошную область с данным затравочным пикселом и цветом границы в цвет ci.
1.Инициализировать стек:Push(x0,y0).
2.Пока стек не пуст выполнить: начало
Извлечь пиксел из стека и закрасить его в цвет области:
Pop(x,y);
Нарисовать_точку(x,y,ci);
3.Присвоить: xw=x; x=x+1.
4.Пока c(x,y) # cb заполняем интервал справа от затравки:
Нарисовать_точку(x,y,ci); x=x+1;по окончанию идти к 5.
5.Присвоить: xr=x-1; x=xw; x=x-1.
6.Пока c(x,y) # cb заполнть интервал слева от затравки: Нарисовать_точку(x,y,ci);x=x-1; по окончанию идти к 7.
7.Сохранить крайний слева пиксел: xl=x+1;
8.Проверить строки ниже и выше данной, если там есть еще незаполненные пикселы искать затравку, начиная с левого края:
Для j от -1 до 2 с шагом 3 выполнить: начало
x=xl; y=y+j;
Пока x <= xr искать затравку на строке ниже(выше): начало
fl="ложь";
Пока ( c(x,y)#cb and c(x,y)#ci and x<xr ) заполнить точки внутри:
начало
Увеличить х на единицу.
Если (not fl) = "истина" то присвоить fl="истина". конец
Если fl="истина" то крайний справа пиксел - в стек: начало
Если ( x=xr and c(x,y)#cb and c(x,y)#ci ) то Push(x,y) иначе Push(x-1,y).
Присвоить fl="ложь". конец
Продолжить проверку,если интервал был прерван: Присвоить xb=x.
Пока (c(x,y)=cb or c(x,y)=ci and x<xr) увеличить x на 1. Если x=xb то присвоить: x=x+1.
конец
конец
конец пункта 2.
6.Закончить.
Алгоритм правильно заполняет любую область, справляется с внутренними дырами и зубцами на границе. Используется при закраске, когда известна хотя бы одна точка внутри необходимой для закрашивания области.

Задание:
1. Написать на языке PASCAL программу, реализующую алгоритм заливки многоугольника любой формы.
2. Проверить правильность работы программы, нарисовав с помощью функций модуля GRAPH невыпуклый многоугольник (с дырами внутри), закрасьте его заданным цветом, указав координаты принадлежащей многоугольнику точки.
3. Написать и отладить программу, реализующую алгоритм построчного заполнения выпуклого многоугольника, заданного координатами вершин и цветом границы.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.10.2020, 18:16
Ответы с готовыми решениями:

Реализация алгоритмов растровой развертки линий
Уважаемые форумчане, помогите исправить программу. При запуске программы вылетает exitcode=1. program lines; uses crt, graph; var...

Рисование сплошных областей
Здравствуйте! Пытаюсь нарисовать прямоугольник линиями.. Написал функцию, но она не рисует - выдаётся исключение. Подскажите, что я сделал...

Загрузка растровой графики
Здравствуйте! Начал разбираться с растровой графикой и с самого начала не могу понять, почему мое изображение не выводится в окне....

3
 Аватар для canadamoscow
1179 / 430 / 194
Регистрация: 23.03.2020
Сообщений: 1,021
Записей в блоге: 1
07.10.2020, 13:25
Лучший ответ Сообщение было отмечено mr-Crocodile как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
uses GraphABC;
 
procedure Zakraska(i,j:integer);
begin
  var ColorTek := GetPixel(i,j);
  var ColorZ := ClRandom;
  var vorkug := |(0,1), (0,-1),(-1,0),(1,0)|; //(влево  вправо вниз вверх )
  var q := new Stack<(integer,integer)>;
  q.Push((i, j)); 
  repeat 
   var (ii, jj) := q.Pop;
    For var w := 0 to 3 do
    begin       
      var (u, v) :=((ii+vorkug[w].Item1).Clamp(0,500), (jj+vorkug[w].Item2).Clamp(0,500) );
      if GetPixel(u,v) = ColorTek then begin PutPixel(u,v,ColorZ); q.Push((u,v)) end;      
    end;
  until not q.Any;
end;
 
procedure Init;
begin
   Window.Clear;
   Moveto(50,50);
   loop 5 do lineto(Random(10,490),Random(10,490));
   lineto(50,50);
   DrawCircle(100,100,20);
end;
 
begin
  OnMouseDown := procedure (x,y, mb:integer) →  if mb = 1 then Zakraska(x,y) else Init;
  window.SetSize(500,500);
  Init;
end.
0
0 / 0 / 0
Регистрация: 05.07.2020
Сообщений: 12
16.10.2020, 13:01  [ТС]
Спасибо! Но у меня компилятор пишет:"Нет индексного свойства по умолчанию для типа set of Tuple '2" (в строке 15). Как это исправить?
0
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
16.10.2020, 13:06
Лучший ответ Сообщение было отмечено musikh как решение

Решение

musikh, обновляй PascalABC.NET
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.10.2020, 13:06
Помогаю со студенческими работами здесь

Поточные выводы растровой графики
Всем моё почтенное приветствие :senor: Суть задания: необходимо создать 3 потока, каждый из которых будет выводить своё изображение в...

Стили заполнения областей
Подскажите пожалуйста, почему все стили уехали за пределы формы, никак не могу это исправить. вот код unit Unit1; interface ...

Графики скорости работы алгоритмов сортировки
Добрый вечер всем. Задали сделать график по 3м сортировкам. Количество элементов в массиве постоянно изменяется. 1 точка- 50 000...

Посоветуйте пакет для работы с растровой графикой
Привет всем. Я делаю свою графическую капчу, и для ее реализации требуется пакет для работы с растровой графикой. Самый популярный пакет,...

Программа с применением графики, алгоритмов цикла и ветвления
Добрый вечер. Нужно разработать программу с применением графики, применяя алгоритм цикла и ветвления. Помогите пожалуйста.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru