Home > Programming > Fractals > Triangle

triangle.gif

Previous

Next


const
  
escape=4.0;                { escape value }
  
attract=0.0001;            { attractor sensitivity }

const
  
Black        = 0;
   Blue         = 1;
   Green        = 2;
   Cyan         = 3;
   Red          = 4;
   Magenta      = 5;
   Brown        = 6;
   LightGray    = 7;
   DarkGray     = 8;
   LightBlue    = 9;
   LightGreen   =10;
   LightCyan    =11;
   LightRed     =12;
   LightMagenta =13;
   Yellow       =14;
   White        =15;

function GetRGBColor(color:byte):longint;
begin
  case
Color of
   
black : GetRGBColor := RGB(0,0,0);
    blue  : GetRGBColor := RGB(0,0,128);
    green : GetRGBColor := RGB(0,128,0);
    cyan  : GetRGBColor := RGB(0,255,255);
    red   : GetRGBColor := RGB(128,0,0);
    magenta : GetRGBColor := RGB(128,0,128);
    brown : GetRGBColor := RGB(128,128,0);
    lightgray : GetRGBColor := RGB(192,192,192);
    darkgray : GetRGBColor := RGB(128,128,128);
    lightBlue : GetRGBColor := RGB(0,0,255);
    lightGreen : GetRGBColor := RGB(0,255,0);
    lightcyan : GetRGBColor := RGB(0,255,255);
    lightRed : GetRGBColor := RGB(255,0,0);
    lightmagenta : GetRGBColor := RGB(255,0,255);
    yellow: GetRGBColor := RGB(255,255,0);
    white : GetRGBColor := RGB(255,255,255);
  else
   
GetRGBColor := RGB(0,0,255);
  end;
end;

////////////////////////////////////////////////////////////////////////////////

procedure FTriangle(ABitmap: TBitmap);
{ compute and display Sierpinski triangle via random orbits}
var
  
x, y      : integer;       { pixel coordinates }
  
triangle  : integer;      { select random traiangle}
  
i         : integer;       { loop counters}
  
MaxX,
   MaxY      : integer;      { maximum X and Y coordinates}
  
Rect      : TRect;
   Iterations: integer;
begin
 
SetRect(Rect, 0, 0, ABitmap.Width, ABitmap.Height);
  with Rect do
  begin
   
MaxX := right - left;
    MaxY := bottom - top;     { find maximum Y coordinate }
   
if (MaxX=0) or (MaxY=0) then exit;
    MaxX := Min(MaxX,MaxY);
    MaxY := MaxX;
    right := left + MaxX;
    bottom := top + MaxY;

    x := random(MaxY);  {select random starting point}
   
y := random(MaxY);  {use MaxX=MaxY }

   
Iterations := MaxY * 100;

    for i := 1 to  iterations do
    begin
     
triangle := random(3)+1{ select random number between 1 and 3}
     
case triangle of         { select which triangle to measure from }
        
1:   begin
              
x := x div 2;             { find 1/2 way point to  A}
              
y := (MaxY + y) div 2
            
end;
         2begin
              
x := (MaxY div 2 + x) div 2; { find 1/2 way point to B }
              
y := y div 2
            
end;
         3begin
              
x := (MaxY + x) div 2;        { find 1/2 way point to C}
              
y := (MaxY + y) div 2
            
end
      end
;
      ABitmap.Canvas.Pixels[x+Left,y+Top] := ABitmap.Canvas.Pen.Color;
    end;
  end;
end;

////////////////////////////////////////////////////////////////////////////////


� 2004 Jim Valavanis

Previous

Next

1