LINUX.ORG.RU

Как лучше заполнить четырехугольник?

 


0

1

Вот есть четырехугольник, заданный 4мя точками. Как его залить? Положем, что есть быстрая функция, которая может строчку от X1 до X2 сверхбыстро залить. При этом четырехугольник может быть невыпуклым (с пересеченими).

В голове два варианта - взять

Xmin = min(X1, X2, X3, X4);
Xmax = max(X1, X2, X3, X4);
аналогично для Y
потом цикл от Xmin до Xmax, вложенный от Ymin до Ymax. Каждый раз проверять, внутри точка или нет, если да - закрасить.

второй вариант - как-то извратиться и использвать быструю функцию.

Что скажете?

P.S. Алгоритм заливки не подходит, так как под ним может быть изображение.

★★

Последнее исправление: sambist (всего исправлений: 1)

Разбей свою пересекающуюся фигуру на не пересекающиеся треугольники.

сверхбыстро

sudo cast Carb_blog.

anonymous
()

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

E ★★★
()

Присоединяюсь к предыдущим ораторам, советую посмотреть в сторону алгоритмов компьютерной графики.

sT331h0rs3 ★★★★★
()

Как лучше заполнить четырехугольник?
Как его залить?
P.S. Алгоритм заливки не подходит, так как под ним может быть изображение.

С кашей в голове для начала нужно разобраться, гречневая она или манная. А потом сюда comp.graphics.algorithms.faq

nikitos ★★★
()
Ответ на: комментарий от nikitos

С кашей в голове для начала нужно разобраться

Где вы увидели кашу? Я виноват, что в русском языке так мало таких прилагательных? Алгоритмы заливки которые не подходят это те, которые работают как тулза «залить» в пеинте.

sambist ★★
() автор топика
Ответ на: комментарий от sambist

Русский язык не виноват в том что им пользуешься. Судя по тому - что написано:

есть быстрая функция, которая может строчку от X1 до X2 сверхбыстро залить

Подразумевается наличие неких «строк», что в свою очередь наталкивает на мысль о том, что хочешь работать с растром. Но функция заливки «как в пеинте» тебе не подходит.

Отсюда вывод о каше: работаешь с вектором - разбивай на треугольники, (процесс этот ещё и тесселяцией называют, если мы про старый OpenGL), работаешь с растром - используй растр, заливай монохромную маску (аля индикаторная функция объекта, который ты хочешь залить). Заливка маски никак не попортит твоё изображение, когда будешь маску накладывать, с помощью всяких там ROP или bitblit операций - то и решишь, что с ней делать, можно маску и в альфаканал засовывать.

nikitos ★★★
()
Ответ на: комментарий от nikitos

заливай монохромную маску

Вот только создавать новую текстуру на каждый чих мне недоставало.

можно маску и в альфаканал засовывать

Чтобы похерить альфаканал.

работаешь с вектором - разбивай на треугольники

Я в растре. Но идея разбиения на треугольники от E мне понравилась. Осталось обдумать случаи невыпуклого треугольника, но это мелочи.

sambist ★★
() автор топика
Ответ на: комментарий от sambist

Осталось обдумать случаи невыпуклого треугольника
невыпуклово треугольника

действительно, тут есть над чем подумать.

x4DA ★★★★★
()
Ответ на: комментарий от x4DA

исследования невыпуклых треугольников на нобелевку тянут как минимум

Harald ★★★★★
()
Ответ на: комментарий от x4DA

Опечатался. После двух суток без сна вы и не такое напишете.

sambist ★★
() автор топика

Как его залить?

Алгоритм заливки не подходит

Так и не понял, чего ты хочешь. Что должно происходить с этим самым изображением? Как определяются границы изображения?

buddhist ★★★★★
()
Ответ на: комментарий от sambist

Я в растре

Кажется, ты не понял. Скорее всего ты растеризуешь векторное представление. Будь ты «в растре» у тебя бы не было никакого понятия о многоугольниках, а были бы исключительно понятия о точках.

buddhist ★★★★★
()
Ответ на: комментарий от Deleted

Не думаю, что 350.9 КБ Си кода тянут на лабу.

sambist ★★
() автор топика
Ответ на: комментарий от sambist

граф. библиотеку интерфейса

так может, у тебя там из четырехугольников только прямоугольники со сторонами, параллельными осям?

MyTrooName ★★★★★
()
Ответ на: комментарий от MyTrooName

Нет. Кроме того, в конфигурационном файле задаются коэффициенты для сглаживания каждого угла по отдельности с помощью кривых Безье. Конкретно этот блок - описание темы для виджетов.

sambist ★★
() автор топика
2 октября 2014 г.

Как лучше заполнить четырехугольник?

Котятами.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.