Крест

fr030.gif

Построить фрактал крест

Используются два нелинейных преобразования. Эти преобразования выглядят следующим образом:

Здесь L - поворот на 90 градусов относительно точки (0, 0), а R - "растяжение" относительно точки (1, 0) с переменным показателем, который зависит от растояния от центра (1, 0). Приведенный пример получен при a=2,8.

program Rnd;
Uses CRT, Graph;
Var
   gd,gm : Integer;
 
Procedure draw;  //создаём процедуру,которая будет рисовать этот крест
const
  iter = 70000;
  a = 2.8;
Var            //объявляем переменные
   t, x, y, p : Real;
   k : LongInt;
   mx, my, rad : Integer;
Begin
   mx := 320;
   my := 240;
   rad := 200;
   Randomize;   //подключаем генератор случайных чисел
   x := 0.0;
   y := 0.0;
   For k := 1 To iter Do Begin
      p := Random;
      t := x;
     If p <= 1/2 Then Begin    //применяем условие для L
         x := -y;
         y := t;
      End
      Else
         Begin    //применяем условие для R
            x := 1+(a*(x-1))/(sqr(x-1)+sqr(y)+1);
            y := a*y/(sqr(t-1)+sqr(y)+1);
         End;
      PutPixel(mx + Round(rad * x), my - Round(rad * y), 2); 
   End;
End;
 
Begin
   gd := Detect;
   InitGraph(gd,gm,'c:\bp\bgi');  //инициализируем графику
   draw;  //вызываем процедуру,которая будет рисовать крест
   ReadKey;
   CloseGraph;
End.

Ключевые слова: 
фракталы, крест
ВложениеРазмер
krest.rar18.42 кб