[Site Home] [Forum Home] [Articles] [File DB] [News Archives]

Programming -> fractals generated by turing :)


(View original topic)


rip_phreaker - May-07-2005 server time
ok this was one long night playing with turing


CODE
View.Set ("graphics:645;645,nobuttonbar,position:300;300")
proc AddGradient (c1, c2, n : int)
   var clr : int
   var r1, g1, b1 : real
   var r2, g2, b2 : real
   var p, p0 : real
   RGB.GetColor (c1, r1, g1, b1)
   RGB.GetColor (c2, r2, g2, b2)
   const a := 50
   for i : 1 .. n
       p := (i / n) * 100
       p0 := 100 - p
       clr := RGB.AddColor ((((r1 * p) + (r2 * p0)) / 2) / a, (((g1 * p) + (g2 * p0)) / 2) / a, (((b1 * p) + (b2 * p0)) / 2) / a)
   end for
end AddGradient
%ColorAdd (yellow, blue, 25)
% ColorAdd (brightblue,brightgreen,5)
% ColorAdd (brightgreen,yellow,5)
% ColorAdd (yellow,13,5)
% ColorAdd (13,brightred,5)
AddGradient (9, 7, 28)
AddGradient (12, 9, 100)
AddGradient (14, 12, 118)
AddGradient (0, 14, 10)

function distance (x1, y1, x2, y2 : real) : real
   result ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5
end distance
var ox, oy : real := maxx div 2

type complex :
   record
       r : real
       i : real
   end record

function AddComplex (comp1, comp2 : complex) : complex
   var hold : complex
   hold.r := comp1.r + comp2.r
   hold.i := comp1.i + comp2.i
   result hold
end AddComplex
function MultComplex (comp1, comp2 : complex) : complex
   var hold : complex
   hold.r := (comp1.r * comp2.r) - (comp1.i * comp2.i)
   hold.i := (comp1.r * comp2.i) + (comp1.i * comp2.r)
   result hold
end MultComplex
function Iterate (comp1 : complex, C : complex) : complex
   var hold : complex
   hold := MultComplex (comp1, comp1)
   hold := AddComplex (hold, C)
   result hold
end Iterate
var maxI : int := 100
var count : int := 0
var dwell : array 0 .. maxx * 3, 0 .. maxy * 3 of real
var transX, transY : int := maxx div 2

var c : complex
c.r := -0.79
c.i := 0.16

var hold : complex

   for x : -transX .. maxx
       for y : -transY .. maxy
           hold.r := x / (maxx div 2)
           hold.i := y / (maxy div 2)
           loop
               count += 1
               exit when count >= maxI
               if distance (hold.r, hold.i, ox, oy) <= maxx div 1.3 then
                   hold := Iterate (hold, c)
               else
                   exit
               end if
           end loop
           dwell (x + maxx, y + maxy) := count
           drawdot ((x + transX) div 1, (y + transY) div 1, 255 + round ((dwell (x + maxx, y + maxy) / maxI) * 255))
           count := 0
       end for
   end for
%
% for x : 1 .. maxx
%     for y : 1 .. maxy
%         % if dwell (x, y) = maxI then
%         %     drawdot (x, y, 7)
%         % else
%
%         % end if
%     end for
% end for
%


(Showing 50 last posts, newest on top)