Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.65/55: Рейтинг темы: голосов - 55, средняя оценка - 4.65
 Аватар для Алиш
62 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 126

Алгоритм построчного заполнения многоугольника с использованием затравочного пикселя

09.02.2012, 16:03. Показов 12010. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
почему у меня не работает программа?
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
 #include 
      #pragma hdrstop
      #include "windows.h"
      #include "Unit1.h"
      #pragma package(smart_init)
      #pragma resource "*.dfm"
      TForm1 *Form1;
      int x0=0,y0=0,start=0,xtmp,ytmp,xmet=-4,ymet=-2,metka=0; // переменные
      для построения графика
 
      int tx,ty,xm,xr,xl,j,c,meta; //Переменные самого алгоритма
      TColor kraska=clRed,bcolor=clBlue,nomy,my;
      struct pointt {
        unsigned int x;
        unsigned int y;
      };
 
      static pointt pont[500][500]; //Матрица реализаций
      int raz;
 
      cel()
      {
      Form1->PaintBox1->Canvas->Pen->Color = bcolor;
      Form1->PaintBox1->Canvas->Brush->Color=RGB(255,255,255);
      Form1->PaintBox1->Canvas->Rectangle(10,10,210,110);
      }
  
      __fastcall TForm1::TForm1(TComponent* Owner)
              : TForm(Owner)
      {
      kraska=RGB(255,0,0);bcolor=RGB(0,0,255);
 
      cel();
 
      Edit1->Text="<-- Нарисуйте гранично-заданную область -->";
      }
 
      Zakras()
      {
            xm=tx;
            while(Form1->PaintBox1->Canvas->Pixels[tx][ty]!=bcolor)
            {
                  Form1->PaintBox1->Canvas->Pixels[tx][ty]=kraska;
                  tx=tx+1;
                      if (tx<=0) break;
                      if (ty<=0) break;
                      if (tx>420) break;
                      if (ty>420) break;
            }
 
              if(Form1->PaintBox1->Canvas->Pixels[tx][ty]==bcolor) xr=tx-1;
 
            tx=xm;
                      while(Form1->PaintBox1->Canvas-
      >Pixels[tx][ty]!=bcolor)
                      {
                  Form1->PaintBox1->Canvas->Pixels[tx][ty]=kraska;
                  tx=tx-1;
                      if (tx<=0) break;
                      if (ty<=0) break;
                      if (tx>420) break;
                      if (ty>420) break;
                      }
 
                      tx=tx+1;
            if(Form1->PaintBox1->Canvas->Pixels[tx-1][ty]==bcolor) xl=tx;
 
      }
 
      Stack()
      {
 
              tx=xl;
                             ty=ty+j;
                      while(tx<=xr)
                      {
                              c=0;
                              while((Form1->PaintBox1->Canvas-
      >Pixels[tx][ty]!=bcolor)&&
                              (Form1->PaintBox1->Canvas-
      >Pixels[tx][ty]!=kraska)&&(txPaintBox1->Canvas-
      >Pixels[tx][ty]==bcolor)||
                                         (Form1->PaintBox1->Canvas-
      >Pixels[tx][ty]==kraska)) tx--;
                                             pont[raz]->x=tx;
                                      pont[raz]->y=ty;
                                }
                       tx=tx+1;
                       while(((Form1->PaintBox1->Canvas-
      >Pixels[tx][ty]==bcolor)||
                       (Form1->PaintBox1->Canvas-
      >Pixels[tx][ty]==kraska))&&(txxl))
                         {tx=tx+1;}
                      }
 
 
      }
 
 
      Zaliv()
      {
              raz=1;
              pont[raz]->x=x0;
              pont[raz]->y=y0;
              while(raz>0)
              {
                    tx=pont[raz]->x;
                  ty=pont[raz]->y;
                    raz=raz-1;
                      Form1->PaintBox1->Canvas->Pixels[tx][ty]=kraska;
                      Zakras();
                       j=1;
                      Stack();
                       j=-2;
                      Stack();
              }
              Form1->Edit1->Text="Все закончилось";
      }
 
 
      void __fastcall TForm1::drawing(TObject *Sender, TMouseButton Button,
            TShiftState Shift, int X, int Y)
      {
         if(start==5) {x0=X;y0=Y;Canvas->Pixels[X][Y]=kraska;
      Zaliv();
      }
 
          if((Button==mbLeft)&&(start!=5))
                  {
                   Canvas->Pen->Color = bcolor; // выбрать цвет контура
      //        Brush->Color = clYellow; // выбрать цвет заливки
              if(metka==1) Canvas->LineTo(X,Y);
              metka=1;
               // нарисовать эллипс
              xtmp=X;
              ytmp=Y;
              Canvas->MoveTo(X,Y);
              if(start==0) {x0=X,y0=Y;start=1;}
            // randomize();
      //Canvas->Brush->Color = (Graphics::TColor) $(00FF0000);
 
              }
 
              if (Button==mbRight)
              {
              Canvas->Pen->Color = bcolor;
              Canvas->LineTo(x0,y0);
              metka=0;
              start=0;
              }
              }
 
      void __fastcall TForm1::movexy(TObject *Sender, TShiftState Shift, int
      X,
            int Y)
      {
         Label2->Caption=X;
         Label4->Caption=Y;
       //  xtmp=X;ytmp=Y;
           //Label6->Caption=Canvas->Pixels[x0][y0];
         //Zaliv();
 
      }
 -
      void __fastcall TForm1::vpered(TObject *Sender, TMouseButton Button,
            TShiftState Shift, int X, int Y)
      {
 
          Edit1->Text=" Выберите точку закраски";
      start=5;
      }
  
      void __fastcall TForm1::reset_key(TObject *Sender, TMouseButton
      Button,
            TShiftState Shift, int X, int Y)
      {
      start=0;
 
        PaintBox1->Visible=false;
      PaintBox1->Visible=true;
 
      start=0;
 
      Edit1->Text="<-- Нарисуйте гранично-заданную область -->";
      }
Добавлено через 31 минуту
или в данном варианте где ошибка?
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
#include <stdio.h>
#include <graphics.h>
 
#define MAXARR 300  /* Ìàêñ êîë-âî âåðøèí ìíîãîóãîëüíèêà  */
#define MAXLST 300  /* Ìàêñ ðàçìåð ñïèñêà àêòèâíûõ ðåáåð  */
 
 
/*---------------------------------------------------- FILSTR
 * Çàëèâàåò ñòðîêó iy îò ixn äî ixk
 *
 * void FILSTR (int kod, int iy, int ixn, int ixk)
 */
void FILSTR (kod, iy, ixn, ixk)
int kod, iy, ixn, ixk;
{
   while (ixn <= ixk) putpixel (ixn++, iy, kod);
}  /* FILSTR */
 
 
 
/*--------------- Ãëîáàëû ïðîöåäóðû çàêðàñêè ---------------*/
 
static int   KOD, NWER; /* Êîä çàëèâêè è êîë-âî âåðøèí      */
static float *pt_X;     /* Ìàññèâû âõîäíûõ êîîðäèíàò âåðøèí */
static float *pt_Y;
 
static int   IBGIND;        /* Íîìåð ñëåä âåðøèíû â ñïèñêå */
static int   IEDG[MAXARR];  /* Y-êîîðä âåðøèí ïî âîçðàñòàí */
static int   INOM[MAXARR];  /* è èõ íîìåðà â èñõ ìàññ Py   */
 
/* Ñïèñîê àêòèâíûõ ðåáåð */
static int   IDLSPI;        /* Äëèíà ñïèñêà àêòèâíûõ ðåáåð */
static int   IYREB[MAXLST]; /* Ìàêñ Y-êîîðä àêòèâíûõ ðåáåð */
static float RXREB[MAXLST]; /* Òåê  X-êîîðä àêòèâíûõ ðåáåð */
static float RPRIR[MAXLST]; /* Õ-ïðèðàùåíèå íà 1 øàã ïî Y  */
static float RYSL[MAXLST];  /* Dy ìåæäó òåê è ñîñåäí âåðø  */
                            /* Dy <= 0.0 - îáû÷íàÿ âåðøèíà */
                            /*     > 0.0 - ëîêàë ýêñòðåìóì */
 
 
/*---------------------------------------------------- FORSPI
 * int  FORSPI (int IYBEG)
 *
 *  1) Ôîðìèðóåò ýëåìåíòû ñïèñêà äëÿ ðåáåð,
 *     íà÷èíàþùèõñÿ â IYBEG;
 *  2) Âû÷ècëÿeò IBGIND - èíäeêc ía÷aëa ñëåäóþùåé
 *     âepøèíû â cïècêe âepøèí;
 *  3) Âîçâðàùàåò IYSLED - Y êoopäèíaòy áëèæaéøeé
 *     âepøèíû, äo êoòopoé ìoæío çaëèâaòü áeç
 *     ïepecòpoéêè cïècêa.
 *
 *  Ãëoáaëüíûe âeëè÷èíû :
 *
 *  KOD    - êîä çàëèâêè
 *  NWER   - êoë-âo âepøèí â ècxoäíoì ìíoãoyãoëüíèêe,
 *  *pt_X  - X-êoopäèíaòû ècxoäíoão ìíoãoyãoëüíèêà,
 *  *pt_Y  - Y-êoopäèíaòû ècxoäíoão ìíoãoyãoëüíèêà,
 *  IEDG   - yïopÿäo÷eííûé ïo âoçpacòaíèþ ìaccèâ
 *           Y êoopäèíaò âepøèí ècxoäíoão ìíoãoyãoëüí
 *  INOM   - INOM[i] çaäaeò íoìep âepøèíû â ècxoäíoì
 *           ìíoãoyãoëüíèêe äëÿ IEDG[i],
 *  IBGIND - èíäeêc ìaccèâoâ IEDG, INOM
 *           oïpeäeëÿeò ãäe ìoæeò ía÷aòücÿ ðåápo,
 *  IDLSPI - äëèía ïocòpoeííoão cïècêa aêòèâíûx ðåáep,
 *           cocòoÿùeão èç :
 *           IYREB  - ìaêc êoopäèíaòû ðåáep,
 *           RXREB  - âía÷aëe ìèí, çaòeì òeêyùaÿ X-êoopäèíaòa,
 *           RPRIR  - ïpèpaùeíèe ê X-êoopäèíaòe ía 1 øaã ïo Y,
 *           RYSL   - ïpèçíaê òoão ÷òo ça âepøèía :
 *                    <= 0 - oáû÷íaÿ,
 *                     > 0 - ëoêaëüíûé ýêcòpeìyì
 *                     ïepece÷eíèe còpoêè çaêpacêè
 *                     c ýêcòpeìyìoì c÷èòaeòcÿ ça 2 òo÷êè,
 *                     c oáû÷íoé - ça 1;
 */
 
static int  FORSPI (IYBEG)
int  IYBEG;
{
 
   int   i,ikledg,intek,intabs,isd;
   int   iyt,ixt,nrebra,inc,inpred,inposl;
   float xt, xc, yt, yc, dy;
 
/* ikledg = êoë-âo âepøèí c äaííûì IYBEG */
 
   ikledg= 0;
   for (i=IBGIND; i<=NWER; ++i)
      if (IEDG[i] != IYBEG) break; else ++ikledg;
 
/* Öèêë ïocòpoeíèÿ cïècêa aêòèâíûx ðåáep
   è çaêpaøèâaíèe ãopèçîíòàëüíûõ ðåáep
 */
 
   for (i=1; i<=ikledg; ++i) {
/* Bû÷èñë íîìåðà òåêóùåé âåðøèíû */
      intek= INOM[IBGIND+i-1];
      intabs= abs (intek);
      xt= pt_X[intabs];
      yt= pt_Y[intabs];
 
/*  Bû÷èñë íîìåðîâ ïðåäûä è ïîñëåä âåðøèí */
      if ((inpred= intabs - 1) < 1) inpred= NWER;
      if ((inposl= intabs + 1) > NWER) inposl= 1;
 
/*
 * Ïî çàäàííûì :
 *    NWER   - êîë-âî âåðøèí,
 *    intek  - íîìåð òåêóùåé âåðøèíû,
 *    isd = 0/1 - ïðàâèëó âûáîðà ñîñåäíåé âåðøèíû -
 *                ïðåäûäóùàÿ/ïîñëåäóþùàÿ
 *    âû÷ècëÿeò dy,
 *    Åcëè dy <  0 òo âepøèía yæe oápaáoòaía,
 *    Åcëè dy == 0 òo âepøèíû ía oäíîì Y
 *                 Ïpè ýòoì còpoèòcÿ ãopèçoíòaëüíûé oòpeçoê.
 *                 Ôaêò çaêpacêè ãopèçoíòaëüíoão ðåápa
 *                 oòìe÷aeòcÿ oòpèöaòeëüíûì çía÷eíèeì
 *                 cooòâeòcòâyþùeão çía÷eíèÿ INOM.
 *    Åcëè dy >  0 òo ôopìèpyeòcÿ íoâûé ýëeìåíò cïècêa
 *                 aêòèâíûx ðåáep
 */
 
      for (isd=0;  isd<=1; ++isd) {
         if (!isd) nrebra= inc= inpred; else {
            inc= inposl;  nrebra= intabs;
         }
         yc= pt_Y[inc];
         dy= yc - yt;
         if (dy < 0.0) continue;
         xc= pt_X[inc];
         if (dy != 0.0) goto DYNE0;
            if ((inc= INOM[nrebra]) < 0) continue;
            INOM[nrebra]= -inc;
            iyt= yt;
            inc= xc;
            ixt= xt;
            FILSTR (KOD, iyt, inc, ixt);
            continue;
DYNE0:   ++IDLSPI;
         IYREB[IDLSPI]= yc;
         RXREB[IDLSPI]= xt;
         RPRIR[IDLSPI]= (xc - xt) / dy;
         inc= (!isd) ? inposl : inpred;
         RYSL[IDLSPI]=  pt_Y[inc] - yt;
      }   /* öèêëà ïî isd */
   }  /* ïîñòðîåíèÿ ñïèñêà àêòèâíûõ ðåáåð */
 
/*  Bû÷èñëåíèå Y áëèæàéøåé âåðøèíû */
   if ((i= (IBGIND += ikledg)) > NWER) i= NWER;
   return (IEDG[i]);
} /* Ïðîöåäóðû FORSPI */
 
 
 
/*-----------------------------------------------------  V_FP1
 * Îäíîòîííî çàëèâàåò ìíîãîóãîëüíèê,
 * çàäàííûé êîîðäèíàòàìè âåðøèí
 *
 * void V_FP1 (int pixel, int kol, float *Px, float *Py)
 *
 */
void V_FP1 (pixel, kol, Px, Py)
int  pixel, kol;  float *Px, *Py;
{
int  i,j,k,l;
int  iytek;    /* Y òåêóùåé ñòðîêè ñêàíèðîâàíèÿ        */
int  iymin;    /* Y-ìèí ïðè ñîðòèðîâêå ìàññèâà Y-êîîðä */
int  iybeg;    /* Ìèí Y-êîîðäèíàòà çàëèâêè  */
int  iymak;    /* Max Y-êîîðäèíàòà çàëèâêè  */
int  iysled;   /* Y êoopä áëèæaéøeé âepøèíû, äo êoòopoé */
               /* ìîæíî çaëèâaòü áeç ïepecòpoéêè cïècêa */
int  newysl;
int  ixmin;    /* X-ìèí ïðè ñîðòèðîâêå äëÿ òåê ñòðîêè */
int  ixtek;    /* X-òåê ïðè ñîðòèðîâêå äëÿ òåê ñòðîêè */
int  irabx[MAXLST]; /* X-êîîðä ïåðåñå÷åíèé â ñòðîêå ñêàíèð */
 
   KOD= pixel;    /* Ïàðàìåòðû â ãëîáàëû */
   NWER= kol;
   pt_X= Px;
   pt_Y= Py;
 
/*  Ïîñòðîåíèå ìàññèâîâ Y è èõ íîìåðîâ */
   for (i= 1; i<=NWER; ++i) {IEDG[i]= Py[i];  INOM[i]= i; }
 
/*  Cîâìåñòíàÿ ñîðòèðîâêà ìàññèâîâ IEDG, IHOM */
   for (i= 1; i<=NWER; ++i) {
      iymin= IEDG[i];
      k= 0;
      for (j=i+1; j<=NWER; ++j)
         if ((l= IEDG[j]) < iymin) {iymin= l; k= j; }
      if (k) {
         IEDG[k]= IEDG[i]; IEDG[i]= iymin;
         iymin= INOM[k];
         INOM[k]= INOM[i]; INOM[i]= iymin;
      }
   }
 
/* Hà÷àëüíûå ïðèñâîåíèÿ */
   IDLSPI= 0;
   IBGIND= 1;
   iybeg= IEDG[1];
   iymak= IEDG[NWER];
 
/* Ôîðìèðîâàíèå íà÷àëüíîãî ñïèñêà àêò ðåáåð */
 
   iysled= FORSPI (iybeg);
   if (!IDLSPI) goto KOHGFA;
 
/* Ãîðèçîíòàëüíàÿ ðàñêðàñêà ïî ñïèñêó */
 
ZALIWKA:
 
   for (iytek=iybeg; iytek<=iysled; ++iytek) {
      if (iytek == iysled) {    /* Y-êîîðäèíàòà ïåðåñòðîéêè */
         newysl= FORSPI (iytek);
         if (!IDLSPI) goto KOHGFA;
      }
 
/* Bûáîðêà è ñîðòèðîâêà X-îâ èç ñïèñêà ðåáåð */
      l= 0;
      for (i=1; i<=IDLSPI; ++i)
         if (RYSL[i] > 0.0) irabx[++l]= RXREB[i];
         else RYSL[i]= 1.0;
 
      for (i=1;  i<=l; ++i) {
         ixmin= irabx[i];
         k= 0;
         for (j=i+1;  j<=l; ++j) {
            ixtek= irabx[j];
            if (ixtek < ixmin) {k= j; ixmin= ixtek; }
         }
         if (k) {irabx[k]= irabx[i];  irabx[i]= ixmin; }
      }  /* öèêëà ñîðòèðîâêè */
 
/*  Cîáñòâåííî çàëèâêà */
 
      for (j=1;  j<=l-1;  j+= 2)
         FILSTR (KOD,iytek,irabx[j],irabx[j+1]);
 
      for (j=1;  j<=IDLSPI; ++j)        /*  Ïðèðàùåíèÿ X-îâ */
         RXREB[j]= RXREB[j] + RPRIR[j];
   }  /* öèêëà ãîðèçîíòàëüíîé ðàñêðàñêè */
 
   if (iysled == iymak) goto KOHGFA;
 
/*  Bûáðàñûâàíèå èç ñïèñêà âñåõ ðåáåð ñ YMAK ðåáðà == YSLED */
 
   i= 0;
M1:++i;
M2:if (i > IDLSPI) goto WYBROSILI;
      if (IYREB[i] != iysled) goto M1;
         --IDLSPI;
         for (j=i;  j<=IDLSPI; ++j) {
            IYREB[j]= IYREB[k= j+1];
            RXREB[j]= RXREB[k];
            RPRIR[j]= RPRIR[k];
         }
         goto M2;
WYBROSILI:
   iybeg= iysled + 1;
   iysled= newysl;
   goto ZALIWKA;
 
KOHGFA:;
}  /* V_FP1 */
Добавлено через 1 минуту
мне самое главное нужно заполнить многоугольник с использованием затравочного пикселя.

Добавлено через 17 часов 54 минуты
у кого нибудь есть варианты где может быть здесь ошибка?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.02.2012, 16:03
Ответы с готовыми решениями:

Алгоритм построчного заполнения многоугольника с использованием затравочного пикселя
Задание: 1. Методом построчного заполнения с затравкой закрасить произвольно задаваемую область, состоящую из ломаных. Показать...

Алгоритм построчного заполнения многоугольника с использованием затравочного пикселя
проверьти работает ли программа или в чем ошибка? unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes,...

Алгоритм построчного заполнения фигур с затравкой
int LineFill(int x, int y, int dir, int PrevXl, int PrevXr, int **L, int BolderColor, int Color) { int xl = x, xr = x; int c; ...

27
13.02.2012, 20:43
Студворк — интернет-сервис помощи студентам

Не по теме:

то, что ты апаешь тему по 10 раз в день, число желающих помочь не увеличит. даже наоборот. тебе указали, что в разделе фриланса тебе все напишут в лучшем виде. тут же никто не хочет возиться с графикой (сам алгоритм довольно прост, а вывести результаты в цвете сложнее).

0
13.02.2012, 21:11  [ТС]

Не по теме:

Paporotnik, мне обязательно в цвете) просто скажите где в моих программах ошибка и все.

0
 Аватар для Алиш
62 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 126
14.02.2012, 21:55  [ТС]
можете скинуть ехе файлы этих программ пожалуйста
0
 Аватар для Gubila_2000
7 / 3 / 3
Регистрация: 07.11.2014
Сообщений: 218
Записей в блоге: 1
01.05.2016, 12:07
ValeryS, Этот алгоритм вроде бы должен работать, а почему у меня программа не отвечает с ней(проверка на выход за пределы не проводится)? Отправляю в эту функцию координаты из обьекта Image1 в среде Embarcadero C++ Builder. Этот и подобные алгоритмы просто перегружают программу или зацикливают.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
01.05.2016, 13:44
Цитата Сообщение от Gubila_2000 Посмотреть сообщение
Этот алгоритм вроде бы должен работать,
этот- это какой?

теме то уже 4 года
0
 Аватар для Gubila_2000
7 / 3 / 3
Регистрация: 07.11.2014
Сообщений: 218
Записей в блоге: 1
01.05.2016, 14:39
ValeryS, да я понимаю, но ведь вы увидели)
Был предложен черновой вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void __fastcall Tlb11::Image1Click(TObject *Sender)
{
fncFill(int x,int y,char * pole,char colorFill, char colorMask)
{
   pole[x][y]=colorFill;
  if(pole[x+1][y]==colorMask)
     fncFill(x+1,y,pole,colorFill,colorMask);
 
   if(pole[x][y+1]==colorMask)
     fncFill(x,y+1,pole,colorFill,colorMask);
 
if(pole[x-1][y]==colorMask)
     fncFill(x-1,y,pole,colorFill,colorMask);
 
   if(pole[x][y-1]==colorMask)
     fncFill(x,y-1,pole,colorFill,colorMask);
 
}
Я его и на с++ и на делфи пытался использовать - везде программа не отвечает при попытке воспользоваться этой функцией. Я и подобные алгоритмы гуглил, везде один результат

Добавлено через 22 минуты
Ага, пошаманил чуток и понял что функция все таки работает НО, выбивает с ошибкой "программа не отвечает", если, например, в правильном треугольнике стороны больше 100 пикселов. Видимо, этот алгоритм слишком тяжелый для полиговнов с большей площадью. А как сделать, чтобы работало при любых размерах, в пределах экрана моего ноутбука?
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
01.05.2016, 16:56
Цитата Сообщение от Gubila_2000 Посмотреть сообщение
Был предложен черновой вариант
это не черновой вариант, это просто идея
нет проверки на выход за пределы массива, нет аварийного выхода, нет глубины рекурсии
в общем, в реальности быть использован не может
доводить до ума у меня нет ни времени, ни желания

Добавлено через 2 минуты
Цитата Сообщение от Gubila_2000 Посмотреть сообщение
char * pole
странно что она вообще заработала, аргумент то неправильный
0
 Аватар для Gubila_2000
7 / 3 / 3
Регистрация: 07.11.2014
Сообщений: 218
Записей в блоге: 1
02.05.2016, 14:05
ValeryS,
странно что она вообще заработала, аргумент то неправильный
само собой я типы и аргументы поменял под свою программу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.05.2016, 14:05

Простой и построчный алгоритм заполнения многоугольника
Простой и Построчный алгоритм заполнения многоугольника с затравкой C#. Собственно как это чудо сделать плиз помогите есть вот такой код...

Алгоритм закрашивания многоугольника линиями
Доброго времени суток! Интересует пара вопросов по следующему алгоритму: Найти min{yi} и max{yi} среди всех вершин Pi. ...

Алгоритм нахождения вершин многоугольника
Есть таблица с координатами точек. Как определить вершины многоугольника? Вершин может быть произвольное количество. Пример таблицы: ...

Алгоритм нахождения вершин многоугольника
Как построить многоугольник с максимальной точностью, если известно: 1.Количество вершин многоугольника 2.Первые две вершины имеют...

Реализовать алгоритм закраски произвольного многоугольника
Помогите,кто знает Реализовать алгоритм закраски произвольного многоугольника,если r=1


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru