IFS-Дендрит

fr102.gif

Построить фрактал IFS-Дендрит

Данный фрактал строится благодаря случайному включению одной из двух пар уравнений для каждой итерации:

x= a * x - b * y;
y= b * t + a * y;

или

x= c * x - d * y + 1 - c;
y= d * t + c * y - d;

где iter - число итераций, a - наклон, b - коэффициен размера "листьев", c - "рзброс" точек, d - искажение фрактала, in - "рассеянность", t= x.

#include <stdio.h>
#include <stdlib.h>
#include <graphics.h>
#include <math.h>
#include <conio.h>
 
#define  iter  100000        // число итераций
#define   a   0.00           // наклон 
#define   b   0.70           // коэффициен размера "листьев"
#define   c   0.70           // "рзброс" точек
#define   d   0.00           // искажение фрактала
#define   in  5              // "рассеянность"
 
void main()
{
 
   float t, x, y, p;
   long int k;
   int mx, my, rad;
 
   int gd=DETECT, gm;
   initgraph(&gd, &gm, "j:\\bc31\\bgi");
 
   randomize();
   mx= 220;               // сдвиг по оси ОХ
   my= 300;               // сдвиг по оси ОY
   rad= 400;              // размер            
   x= 0.0;                     // стартовые состояния
   y= 0.0;                     // 
   for(k=1; k<=iter; k++)
   {
      p= random(in);
      t= x;
      if(p<=1/2)
      {
	 x=  a * x - b * y;
	 y=  b * t + a * y;
      }
      else
      {
	 x=  c * x - d * y + 1 - c;
	 y=  d * t + c * y - d;
      }
      putpixel(mx + int(rad * x), my - int(rad * y), 2);
   }
   getch();
   closegraph;
}

Ключевые слова: 
фрактал IFS-Дендрит
ВложениеРазмер
IFS-Дендрит.rar133.12 кб