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

Вход на сайт

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

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

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

Не работает, выводит это: Process terminated with status 4258096 (0 minute(s), 2 second(s)) при этом открывается консоль с тем же числом
А как можно добавить сюда глубину рекурсии, то есть сложность линии?

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

Рейтинг@Mail.ru Яндекс.Метрика
меркурий счетчик электроэнергии трехфазный двухтарифный 380v
Скриншот к примеру
Среда программирования: 
Lazarus
Статья по теме: 

Задача: создание фрактала "Горящий Корабль".
Фрактал является генерацией итеративной функции в комплексной плоскости С:
Zn+1=(|Re(Zn)|-i|Im(Zn)|)2 + C, Z0=0

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

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ExtCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    PaintBox1: TPaintBox;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
type
	TComplex = record          //типизированные константы
		X : Real;
		Y : Real;
	end;
const
        //после какого количества шагов, функция должна прекрать работу
	iterations = 30;
	max  = 16;
var
	z, t, c : TComplex;          //комплексные переменные
	x, y, n : Integer;
	xc, yc  : Integer;            //координаты центра PaintBox1
        r,g,b : Integer;              //цвета для задания в палитре RGB
begin
   //закрасим PaintBox1 черным цветом
   //чтобы заливка корабля была черной, а не белой
   PaintBox1.Canvas.Brush.Color := clBlack;
   Paintbox1.Canvas.Rectangle(0,0,PaintBox1.Width, PaintBox1.Height);
with PaintBox1.Canvas do Begin
   xc := Width div 2;                  //находим координаты центра PaintBox1
   yc := Height div 2;
   // проходим каждый пиксель диапазона на экране
   	for y := -yc to yc do
		for x := -xc to xc do
		begin
			n := 0;
                        //установим начальное значение  константы С
                        //которая определяет форму фрактала
			c.x := x * 0.005 - 0.2;
			c.y := y * 0.005 - 0.3;
                        //начальное значение действительной и мнимой частей числа Z
			z.x := 0;
			z.y := 0;
 
                        //вычисляем реальную и мнимую части числа z
			while (sqr(z.x) + sqr(z.y) < max) and (n < iterations) do
			begin
                                //запоминаем предыдущее значение
                                t := z;
                                //вычисление в текущем значении n < iterations
				z.x := sqr(t.x) - sqr(t.y) + c.x;
				z.y := 2 * abs(t.x * t.y) + c.y;
 
				n:=n+1;
   			end;
			if n < iterations then
                        begin
                          //выбираем цвет по числу итераций
                          //можно выбрать одно из значений переменной color
                          //для изoбражения фрактала в разной цветовой палитре
                          r := (50 * n) mod 256;
                          g := (80 * n) mod 256;
                          b := (120 * n) mod 256;
                          //Pixels[xc+x,yc+y]:=RGBToColor(r,g,b);
                          Pixels[xc+x,yc+y]:=RGBToColor(r,0,0);
			end;
 
		end;
 
end;
end;
 
end.

Прикрепленный файлРазмер
Stus_burning_ship.rar1.24 Мб