Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

Здравствуйте. Спасибо за проект. У меня вопрос, по какой причине определение принадлежности точки многоугольнику работает некорректно, если координаты из больших чисел состоят, например: int[] vertex = new int[] {...
Сейчас проверила нашла причину не запускания // Создание контекста воспроизведения OpenGL и привязка его к панели на форме OpenGLControl1:=TOpenGLControl.Create(Self); with OpenGLControl1 do begin Name:='OpenGLControl1'; //вот тут...
Ну..кажется что то пошло не так http://pp.usera...
Пример, к которому вы оставили комментарий строит именно то самое изображение на языке с#, которое вам необходимо. Отличается только цветовая палитра.

Счетчики и рейтинг

Рейтинг@Mail.ru
Скриншот к примеру
Среда программирования: 
Lazarus

Залить гранично-определенную область используя 4-связный алгоритм

Fill4(col, newcol : TColor; x, y : Integer) - рекурсивная ф-ция для заливки
col - цвет границы области
newcol - цвет заливки
x,y - координаты точки внутри области(заливочный центр)

Код программы: 

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  StdCtrls, ColorBox;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    ColorBox1: TColorBox;
    Label1: TLabel;
    PaintBox1: TPaintBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Fill4(col, newcol : TColor; x, y : Integer);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
  i : Integer;
  Ax,Ay : array[0..100] of Integer;
implementation
 
{$R *.lfm}
 
{ TForm1 }
//Очищаем область и рисуем многоугольник
procedure TForm1.Button1Click(Sender: TObject);
begin
     Form1.PaintBox1.Canvas.Brush.Color:=clDefault;
     Form1.PaintBox1.Canvas.Rectangle(0,0,PaintBox1.Width,PaintBox1.Height);
 
     Ax[0]:=100;
     Ay[0]:=155;
     Ax[1]:=175;
     Ay[1]:=30;
     Ax[2]:=250;
     Ay[2]:=155;
     Ax[3]:=200;
     Ay[3]:=175;
     Ax[4]:=175;
     Ay[4]:=105;
     Ax[5]:=150;
     Ay[5]:=175;
     Ax[6]:=100;
     Ay[6]:=155;
     with PaintBox1.Canvas do
     begin
          MoveTo(Ax[0],Ay[0]);
          for i:=1 to 6 do
          begin
               LineTo(Ax[i],Ay[i]);
               MoveTo(Ax[i],Ay[i]);
          end;
     end;
end;
//Заливаем многоугольник цветом, выбранным из списка
procedure TForm1.Button2Click(Sender: TObject);
begin
  Fill4(clBlack, ColorBox1.Selected, 175, 80);
end;
//Рекурсивная ф-ция для заливки гранично-определенной области
//4-х связным алгоритмом
procedure TForm1.Fill4(col, newcol : TColor; x, y : Integer);
begin
    if((PaintBox1.Canvas.Pixels[x,y]<>col)and  //проверка цвета текущего пиксела
       (PaintBox1.Canvas.Pixels[x,y]<>newcol)) then
    begin
        PaintBox1.Canvas.Pixels[x,y]:=newcol;
        Fill4(col, newcol, x+1, y);
        Fill4(col, newcol, x, y+1);
        Fill4(col, newcol, x-1, y);
        Fill4(col, newcol, x, y-1);
    end;
end;
 
 
end.

Прикрепленный файлРазмер
Zalivka.rar306.09 кб