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

Вход на сайт

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

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

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

Здравствуйте, Ильгиз. Математика - царица наук (Карл Гаусс). Изучение математики начинается с детского сада, когда нас учат считать и выполнять простые арифметические операции. Любой, даже самый простейший алгоритм будет связан с арифметическими...
Я хотел узнать математика это обязательно в программирование. Пять лет назад просто из любопытства я увлекся HTML потом изучил CSS и JvaScript потом изучил PHP и Java. Как то не задумывался и начал смотреть форумы и узнал что без математики не...
Все верно, но так же необходимо зайти в: Компоновщик -> Ввод -> Дополнительные зависимости Здесь необходимо нажать изменить и в Дополнительные зависимости прописать это: SDL2.lib SDL2main.lib SDL2test.lib Без этого не заработает. (MVS 2015)
Спасибо за реализацию, она действительно быстрая. Но не все линии отрисовывает в нужную сторону... Необходимо добавить проверку для случая X-линии if(y1 "<" y0) grad=-grad; и аналогично для Y-линии if(x1 "<" x0) grad=-grad; P.S. На...
Отличные уроки(учу GL по ним), только в renderScene нужно добавить очистку буфера цвета и буфера глубины. При изменении размеров треугольники размножаются)

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

Яндекс.Метрика Рейтинг@Mail.ru
http://www.skazka-dom.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 кб