Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
62 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 126
1

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

14.02.2012, 21:53. Показов 2387. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
проверьти работает ли программа или в чем ошибка?
Delphi
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
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  StackPix = record
    x: integer;
    y: integer;
  end;
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormPaint(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  arrStack: array of StackPix;
implementation
uses Math;
{$R *.dfm}
procedure pushStack(pxl: StackPix);
begin
SetLength(arrStack, Length(arrStack)+1);
arrStack[High(arrStack)]:=pxl;
end;
function popStack():StackPix;
begin
if High(arrStack)>=0 then
  begin
  popStack:=arrStack[High(arrStack)];
  SetLength(arrStack, High(arrStack));
  end
end;
procedure www(npxl:StackPix; Xmax:integer);
var
  fl: boolean;
  pc: TColor;
  i: integer;
begin
  while npxl.x <= Xmax do
    begin
      fl:=false;
      pc:=Form1.canvas.Pixels[npxl.x,npxl.y];
      while ((pc <> clBlack) and (pc <> clred) and (npxl.x < Xmax)) do
        begin
          if fl=false then fl:=true;
          npxl.x:=npxl.x+1;
          pc:=Form1.canvas.Pixels[npxl.x,npxl.y];
        end;
      if fl=true then
        begin
          if (npxl.x=Xmax) and (pc <> clBlack) and (pc <> clGreen) then
             pushStack(npxl)
          else
             begin
             npxl.x:=npxl.x-1;
             pushStack(npxl);
             end;
    //    fl:=false;
        end;
      i:=npxl.x;
      pc:=Form1.canvas.Pixels[npxl.x,npxl.y];
      while (((pc=clBlack) or (pc=clGreen)) and (npxl.x<Xmax)) do
        begin
          npxl.x:=npxl.x+1;
          pc:=Form1.canvas.Pixels[npxl.x,npxl.y];
        end;
 
      if npxl.x=i then npxl.x:=npxl.x+1;
  end;
end;
procedure nearby(pxl: StackPix);
var
  pc: TColor;
begin
pc:=Form1.canvas.Pixels[pxl.x,pxl.y];
if (pc <> clBlack) and (pc <> clRed) then pushStack(pxl);
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
canvas.Pen.Color:=clBlack;
canvas.MoveTo(100,115);
canvas.LineTo(180,115);
canvas.LineTo(280,115);
canvas.LineTo(280,270);
canvas.LineTo(230,270);
canvas.LineTo(70,270);
canvas.LineTo(20,270);
canvas.LineTo(20,115);
canvas.LineTo(200,115);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
  pxl: StackPix;
  npxl: StackPix;
  i:integer;
  color: TColor;
begin
  Button1.Enabled:=false;
  pxl.x:=270;
  pxl.y:=118;
  pushStack(pxl);
  while High(arrStack)>-1 do
    begin
    case i  of
    0: color:=clblack;
    1: color:=clblack;
    2: color:=clblack;
    3: color:=clblack;
    4: color:=clblack;
    5: color:=clblack;
    end;
    pxl:=popStack;
    i:=RandomRange(0,5);
    canvas.Pixels[pxl.x,pxl.y]:=color;
 
    npxl.x:=pxl.x-1;
    npxl.y:=pxl.y;
    nearby(npxl);
 
    npxl.x:=pxl.x+1;
    npxl.y:=pxl.y;
    nearby(npxl);
 
    npxl.x:=pxl.x;
    npxl.y:=pxl.y-1;
    nearby(npxl);
 
    npxl.x:=pxl.x;
    npxl.y:=pxl.y+1;
    nearby(npxl);
    end;
 Button1.Enabled:=true;
end;
end.
Добавлено через 3 часа 47 минут
найдите пожалуйста ошибку
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.02.2012, 21:53
Ответы с готовыми решениями:

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

Алгоритм построчного заполнения многоугольника с использованием затравочного пикселя
почему у меня не работает программа? #include #pragma hdrstop #include &quot;windows.h&quot;...

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

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

4
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
15.02.2012, 06:49 2
Убрал лишнее
Delphi
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
unit Unit1;
interface
uses
  Windows, Messages, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormPaint(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormPaint(Sender: TObject);
begin
canvas.Pen.Color:=clBlack;
canvas.MoveTo(100,115);
canvas.LineTo(180,115);
canvas.LineTo(280,115);
canvas.LineTo(280,270);
canvas.LineTo(230,270);
canvas.LineTo(70,270);
canvas.LineTo(20,270);
canvas.LineTo(20,115);
canvas.LineTo(200,115);
end;
 
procedure fill(x,y: integer);
begin
  Form1.canvas.Pixels[x,y]:=clBlack;
  if Form1.canvas.Pixels[x+1,y] <> clBlack then
    fill(x+1,y);
  if Form1.canvas.Pixels[x-1,y] <> clBlack then
    fill(x-1,y);
  if Form1.canvas.Pixels[x,y+1] <> clBlack then
    fill(x,y+1);
  if Form1.canvas.Pixels[x,y-1] <> clBlack then
    fill(x,y-1);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 Button1.Enabled:=false;
 fill(270,118);
 Button1.Enabled:=true;
end;
end.
1
62 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 126
15.02.2012, 09:16  [ТС] 3
почему выдает ошиббку?
на позиции 43(undeclared identifier "Button1"), 45("missing operator or semilocon")
если не трудно можете сразу закинуть программу.
0
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
15.02.2012, 10:17 4
.....
Вложения
Тип файла: rar 1.rar (1.3 Кб, 111 просмотров)
1
62 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 126
15.02.2012, 17:51  [ТС] 5
murderer, спасибо) правда программа кажиться чу чуть не так работает,у в ней я не увидел многоугольник.
0
15.02.2012, 17:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.02.2012, 17:51
Помогаю со студенческими работами здесь

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

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

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

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


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

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