Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2010, 13:32   #1
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
Вопрос замкнутый произвольный контур

Что то ообразить не могу.
Дана двумерная булева матрица некой размерности, по некорорым элементам прошлись и получился замкнутый контур. мне нужно чтобы все, что внутри, включая элементы контура присвоить им true. ну это чем то напоминает заливку в графических редакторах. Что то не могу найти что находится внутри контура.
Контур - это array of TPoint - в нем хранятся координаты каждой из точек, по которым прошлись.
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 09.01.2010, 13:52   #2
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Ну логично предположить, что нужно заполнить все Y значения, лежащие между одинаковыми X значениями.
Тобиш делаем так: берем значение X и ищем по всему TPoint такое же значение X. А далее от Y1 до Y2 заполняем все true.
Код:
var a:array [0..1000,0..1000] of TPoint
               b:array [0..1000,0..1000] of Boolean;
i,t,j,k,m:integer;
p1:TPoint;
label EndSearch;
...
for i:=0 to 999 do
for t:=0 to 999 do
 begin
  p1:=a[i,t];
   for k:=i+1 to 999 do
   for j:=0 to 999 do
     if a[k,j].x = p1.x then 
       begin
         for m:=p1.y to a[k,j].y do
           b[p1.x,m]:=True;
         GoTo EndSearch;
       end;
     EndSearch:
 end;
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 11.01.2010, 13:27   #3
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

ма. это для выпуклого контура, я так тожк хотель только церед два while а вдруг контур "П" образный например? ну в общем если он не выпуклый.
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 11.01.2010, 22:13   #4
_bAd_
Пользователь
 
Регистрация: 11.01.2010
Сообщений: 21
По умолчанию

Проще говоря вот это залейте:

Короче тут прикол в том, что как ни крути заливать придётся с края. например с верхнего левого угла. И залить всё то, что не требует заливки. А потом инвертнуть.И в любом случае возникает вопрос о вложенных периметрах, пусть и замкнутых. Типа кольцо в кольце меньшего диаметра соприкасаются в одной точке. ... Такшта заливайте с краю.
Изображения
Тип файла: jpg 1.JPG (3.6 Кб, 91 просмотров)

Последний раз редактировалось _bAd_; 11.01.2010 в 22:16.
_bAd_ вне форума Ответить с цитированием
Старый 12.01.2010, 14:37   #5
Ralf909
 
Регистрация: 22.12.2009
Сообщений: 4
По умолчанию

Ну тут вот книжка есть про графику.
http://www.phatcode.net/res/224/files/html/index.html

Chapter 38
The Polygon Primeval
Drawing Polygons Efficiently and Quickly
Ralf909 вне форума Ответить с цитированием
Старый 13.01.2010, 22:03   #6
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

ну такие сложные фигуры вряд ли надо, но что то типа одной из конечностей такой звезды может быть, а может быть еще и что нибудь типа пятиконечной звезды... там две конечности получаются на одном уровне.... и как их красить а как это в графических редакторах реализовывают? например так
Изображения
Тип файла: bmp Безымянный.bmp (49.9 Кб, 130 просмотров)
Писано по д'Эльфийски

Последний раз редактировалось Лубышев; 13.01.2010 в 22:07.
Лубышев вне форума Ответить с цитированием
Старый 14.01.2010, 18:51   #7
_bAd_
Пользователь
 
Регистрация: 11.01.2010
Сообщений: 21
По умолчанию

Ну как как.
1 - В редакторах может быть сделано как в Паинте. Но там закрашивают имея не только контур, а еще точку с которой начинать. Это в разы упрощает задачу. А в твоих исходных условиях я про точку ничего не слышал.
2 - Либо если периметр не слишком плавный, имеет некоторые вершины, соединённые прямыми, то можешь обратиться к методу разбиения на треугольники. Тогда получив набор , естественно, выпуклых треугольников, каждый закрасиш по одиночке
3 - Либо как я сразу сказал - закрашивай "Из точки" как паинт, поставив точку в верхнем левом углу. Потом инвертируй. Получишь результат.
_bAd_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рассчитать контур заземления HellMercenariess Компьютерное железо 10 22.05.2013 11:25
Произвольный клик мышью Lime Безопасность, Шифрование 9 28.11.2009 18:23
произвольный доступ к файлам StudentPolitech Общие вопросы C/C++ 7 06.06.2009 14:28
произвольный выбор из констант Arhangel_bes Помощь студентам 11 12.10.2008 22:07