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

Вход на сайт

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

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

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

Спасибо за реализацию, она действительно быстрая. Но не все линии отрисовывает в нужную сторону... Необходимо добавить проверку для случая X-линии if(y1 "<" y0) grad=-grad; и аналогично для Y-линии if(x1 "<" x0) grad=-grad; P.S. На...
Отличные уроки(учу GL по ним), только в renderScene нужно добавить очистку буфера цвета и буфера глубины. При изменении размеров треугольники размножаются)
как исправить это , сделал все по инструкции
Timer1 - выдает ошибку. Использовал IdleTimer1, работает! unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, OpenGLContext, GL, GLU; type { TForm1 } TForm1 =...
в коде присутствуют ошибки! // Считываем координаты procedure TForm1.getCoords(Sender: TObject); var j1:longint; begin n:= StrToInt(Edit2.Text); //число точек s1:=Edit1.Text; s2:=''; i := 1; j:=1; k:=0...

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

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

Одним из фракталов множества Мандельброта является «паук».
Рассматривается множество таких a, которые стремятся к бесконечности при итерировании вида:

z0=c0=a;

z'=z2+c;

c'=c/2+z';

Для построения фрактала будем использовать следующие формулы:

z.X=(z1.X)2-(z1.Y)2+c.X;

z.Y=2*z1.X*z1.Y+c.Y;

c.X=c1.X/2+z.X;

c.Y=c1.Y/2+z.Y;

Для прорисовки фрактала следует нажать кнопку "Fractal"

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

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 =class(TForm)
    Fractal: TButton;
    PaintBox1: TPaintBox;
    procedure FractalClick(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FractalClick(Sender: TObject);
   type
	TComplex = record
		X : Real;
		Y : Real;
	end;
       const
	iter = 50;
	max  = 16;
       var
        z1, z2, c1, c2 : TComplex;
	x, y, n : Integer;
	Mx, My  : Integer;
        col:TColor;
begin
    PaintBox1.Canvas.Clear; //очищаем canvas
    Mx := PaintBox1.Canvas.Width div 2;  //вычисляем центр (ширина)
    My := PaintBox1.Canvas.Height div 2; //вычисляем центр (высота)
    for y:=-My to My   do
     for x:=-Mx  to Mx   do
     begin
           //устанавливаем начальные значения параметров
           n:=0;
           z1.X:=x*0.01;
           z1.Y:=y*0.01;
           c1.X:=z1.X;
           c1.Y:=z1.Y;
            while ((z1.X*z1.X+z1.Y*z1.Y)<max) and (n<iter) do
            begin
                 z2:=z1;
                 c2:=c1;
                 z1.X:=(z2.X*z2.X)-(z2.Y*z2.Y)+c1.X;
                 z1.Y:=2*z2.X*z2.Y+c1.Y;
                 c1.X:=c2.X/2+z1.X;
                 c1.Y:=c2.Y/2+z1.Y;
                 n:=n+1;
            end;
 
             if (n<iter)   //цвет выбираем по числу итераций
             then
             begin
             col :=30*n mod 255;
             PaintBox1.Canvas.Pixels[(Mx div 2)+x, (My div 2)+y]:=RGBToColor(0, col, col);
             end;
     end;
end;
 
end. 

Прикрепленный файлРазмер
Spider_fractal.zip880.19 кб