5 / 5 / 1
Регистрация: 15.09.2016
Сообщений: 410
|
|
1 | |
Алгоритмы закраски фигур07.02.2020, 16:28. Показов 4818. Ответов 5
Метки нет (Все метки)
Здравствуйте, есть задание (opengl древний):
Написать необходимые функции С++ для реализации РАСТРОВЫХ алгоритмов: − ЗАКРАСКА окружности; − закраска эллипса; − закраска многоугольника; − закраска произвольной области. И не дается никаких ссылок, пояснений. Читаю в интернете про простые алгоритмы растрирования отрезков(линий). Но не понимаю, причем тут это к фигурам. И наталкиваюсь на классификацию алгоритмов, что совсем меня диозориентирует. Мне нужно написать алгоритм определения, например, все той же окружности/эллипса. Меня смущает слово - закраска. Я делал ее просто так раньше - брал, рисовал по формуле (или задавал вручную) при помощи примитивов gl_triangle или gl_quad, а перед этим прописывал цвет параметрически при помощи gl_color. И как понять сущность многоугольника, при неизвестном количестве сторон (просто буквенную переменную? хорошо, допустим.. но что делать с произвольной областью - делать через ограничивающие линии?)
0
|
07.02.2020, 16:28 | |
Ответы с готовыми решениями:
5
Алгоритмы закраски (растеризация области) Модель закраски алгоритм закраски Массив разных фигур, и нахождение в нём площади всех фигур |
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
07.02.2020, 17:34 | 3 |
Какой суровый шаг назад. Зачем такие задания…
Причем тут тогда opengl? Тут могут быть самопересечения по идее…а значит алгоритм “Заливка” не будет работать. Может Реализовать типа спрея из Paint? Ведь не указано что произвольная область задается ломанной. Странный подход, если велосипеды делать то скорей искать книги типа “компьютерная графика на ЭВМ”
0
|
5 / 5 / 1
Регистрация: 15.09.2016
Сообщений: 410
|
||||||
07.02.2020, 17:36 [ТС] | 4 | |||||
В методичке ничего про заливу не нашел - боюсь, что не наш случай (хотя с вами согласен - логично ведь). А вот алгоритм Брезенхема фигурировал. И судя по всему не зря. Нашел статический метод, реализующий отрисовку окружности по алгоритму Брезенхема. Но.. и это не совсем наш случай.
"Этот алгоритм является слишком неэффективным, так как для всякого уже отрисованного пикселя функция вызывается ещё 4 раза и, кроме того, данный алгоритм не пригоден для закрашивания контуров фигур площадью в тысячу и более пикселей, так как вложенные вызовы функций делаются для каждого пикселя, что приводит к переполнению стека в ходе выполнения программы.Поэтому для решения задачи закраски области предпочтительнее алго- ритмы, способные обрабатывать сразу целые группы пикселей, т. е. исполь- зовать их «связность». Если данный пиксель принадлежит области, то, скорее всего, его ближайшие соседи также принадлежат данной области. Группой таких пикселей обычно выступает полоса, определяемая правым пикселем. Алгоритм закрашивания линиями. Данный алгоритм получил широкое распространение в компьютерной графике. От простейшего алгоритма он от- личается тем, что на каждом шаге закрашивания рисуется горизонтальная линия, которая размещается между пикселями контура." И все... больше никакой информации. А метод приложу.
0
|
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 |
Я бы пилил алгоритм треугольников. Все эти задачи можно разбить на “закрась треугольник”.
“Клетка геометрии – треугольник. Он так же неисчерпаем, как и вселенная. Игорь Фёдорович Шарыгин” Странное совпадение.
1
|
07.02.2020, 21:31 | |
07.02.2020, 21:31 | |
Помогаю со студенческими работами здесь
6
Интересный эффект закраски Логика закраски ячеек. Реализация массива фигур, вычисление площади и периметра фигур Реализовать один из алгоритмов закраски Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |