Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
5 / 5 / 1
Регистрация: 15.09.2016
Сообщений: 410
1

Алгоритмы закраски фигур

07.02.2020, 16:28. Показов 4818. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, есть задание (opengl древний):
Написать необходимые функции С++ для реализации РАСТРОВЫХ алгоритмов:
− ЗАКРАСКА окружности;
− закраска эллипса;
− закраска многоугольника;
− закраска произвольной области.

И не дается никаких ссылок, пояснений. Читаю в интернете про простые алгоритмы растрирования отрезков(линий). Но не понимаю, причем тут это к фигурам. И наталкиваюсь на классификацию алгоритмов, что совсем меня диозориентирует.

Мне нужно написать алгоритм определения, например, все той же окружности/эллипса. Меня смущает слово - закраска. Я делал ее просто так раньше - брал, рисовал по формуле (или задавал вручную) при помощи примитивов gl_triangle или gl_quad, а перед этим прописывал цвет параметрически при помощи gl_color. И как понять сущность многоугольника, при неизвестном количестве сторон (просто буквенную переменную? хорошо, допустим.. но что делать с произвольной областью - делать через ограничивающие линии?)
Миниатюры
Алгоритмы закраски фигур  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.02.2020, 16:28
Ответы с готовыми решениями:

Алгоритмы закраски (растеризация области)
Здравствуйте, подскажите, пожалуйста, как переделать "Алгоритм построчной заливки области.pdf" в...

Модель закраски
Подскажите пожалуйста, как рассчитывается цвет полигона фигуры для случая одного источника света?

алгоритм закраски
Помогите реализовать алгоритм закраски для выпуклого и монотонного многоугольника на delphi

Массив разных фигур, и нахождение в нём площади всех фигур
Есть разные фигуры, унаследованные от интерфейса Figure, как мне создать сначала массив этих фигур...

5
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
07.02.2020, 16:55 2
Цитата Сообщение от slavek777 Посмотреть сообщение
но что делать с произвольной областью - делать через ограничивающие линии?
Использовать алгоритм Заливка

Название: Recursive_Flood_Fill_4_%28aka%29.gif
Просмотров: 162

Размер: 2.3 Кб
0
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
07.02.2020, 17:34 3
Цитата Сообщение от slavek777 Посмотреть сообщение
Написать необходимые функции С++ для реализации РАСТРОВЫХ алгоритмов:
Какой суровый шаг назад. Зачем такие задания…
Цитата Сообщение от slavek777 Посмотреть сообщение
есть задание (opengl древний):
Причем тут тогда opengl?
Цитата Сообщение от slavek777 Посмотреть сообщение
закраска произвольной области.
Тут могут быть самопересечения по идее…а значит алгоритм “Заливка” не будет работать. Может
Реализовать типа спрея из Paint? Ведь не указано что произвольная область задается ломанной.
Цитата Сообщение от slavek777 Посмотреть сообщение
наталкиваюсь на классификацию алгоритмов
Странный подход, если велосипеды делать то скорей искать книги типа “компьютерная графика на ЭВМ”
0
5 / 5 / 1
Регистрация: 15.09.2016
Сообщений: 410
07.02.2020, 17:36  [ТС] 4
В методичке ничего про заливу не нашел - боюсь, что не наш случай (хотя с вами согласен - логично ведь). А вот алгоритм Брезенхема фигурировал. И судя по всему не зря. Нашел статический метод, реализующий отрисовку окружности по алгоритму Брезенхема. Но.. и это не совсем наш случай.

"Этот алгоритм является слишком неэффективным, так как для всякого
уже отрисованного пикселя функция вызывается ещё 4 раза и, кроме того,
данный алгоритм не пригоден для закрашивания контуров фигур площадью в
тысячу и более пикселей, так как вложенные вызовы функций делаются для
каждого пикселя, что приводит к переполнению стека в ходе выполнения
программы.Поэтому для решения задачи закраски области предпочтительнее алго-
ритмы, способные обрабатывать сразу целые группы пикселей, т. е. исполь-
зовать их «связность». Если данный пиксель принадлежит области, то, скорее
всего, его ближайшие соседи также принадлежат данной области. Группой
таких пикселей обычно выступает полоса, определяемая правым пикселем.
Алгоритм закрашивания линиями. Данный алгоритм получил широкое
распространение в компьютерной графике. От простейшего алгоритма он от-
личается тем, что на каждом шаге закрашивания рисуется горизонтальная
линия, которая размещается между пикселями контура." И все... больше никакой информации.

А метод приложу.
C++
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
        public static void BresenhamCircle(Graphics g, Color clr, int _x, int _y, int radius)
        {
            int x = 0, y = radius, gap = 0, delta = (2 - 2 * radius);
            while (y >= 0)
            {
                PutPixel(g, clr, _x + x, _y + y, 255);
                PutPixel(g, clr, _x + x, _y - y, 255);
                PutPixel(g, clr, _x - x, _y - y, 255);
                PutPixel(g, clr, _x - x, _y + y, 255);
                gap = 2 * (delta + y) - 1;
                if (delta < 0 && gap <= 0)
                {
                    x++;
                    delta += 2 * x + 1;
                    continue;
                }
                if (delta > 0 && gap > 0)
                {
                    y--;
                    delta -= 2 * y + 1;
                    continue;
                }
                x++;
                delta += 2 * (x - y);
                y--;
            }
        }
0
3420 / 1607 / 236
Регистрация: 26.02.2009
Сообщений: 7,856
Записей в блоге: 5
07.02.2020, 18:09 5
Хабре есть неплохая софтовая реализация OpenGL (может чем-то поможет)
https://habr.com/ru/post/248153/
Но там закраска только линии и треугольника. Впрочем любой полигон можно триангулировать - представить в виде треугольников
0
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
07.02.2020, 21:31 6
Цитата Сообщение от snake32 Посмотреть сообщение
Но там закраска только линии и треугольника.
Я бы пилил алгоритм треугольников. Все эти задачи можно разбить на “закрась треугольник”.

“Клетка геометрии – треугольник. Он так же неисчерпаем, как и вселенная. Игорь Фёдорович Шарыгин” Странное совпадение.
1
07.02.2020, 21:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.02.2020, 21:31
Помогаю со студенческими работами здесь

Интересный эффект закраски
Здравствуйте. Может знаете как делается такой эффект? http://www.aaccent.ru/ Если двигать мышью...

Логика закраски ячеек.
Идея проста. В таблице есть список курсов. Так вот если курс вырос то ячейку закрасить красный...

Реализация массива фигур, вычисление площади и периметра фигур
Задание 1: Реализовать иерархию классов представленную на рисунке. В базовом классе описать, а в...

Реализовать один из алгоритмов закраски
В общем пытался реализовать один из алгоритмов закраски. Получил вот такой код. uses graphABC;...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru