Фрактал "HenonIFS"

HenonIFS   (m=3)

Построить фрактал "HenonIFS"

Для получения различных изображений изменяйте в программе параметр m. На рисунке m=3.
m - количество углов у фигуры

Алгоритм:
1) инициализируем графический режим
2) имеется два массива а и b. В массиве а, каждому элементу массива i (0 <= i <= m-1) присваиваем значение cos (2 * M_PI * i/m)
В массиве b, каждому элементу массива i (0 <= i <= m-1) присваиваем значение sin (2 * M_PI * i/m)
3) Пока не нажата клавиша, выполняется цикл:
присвоение переменной l случайную величину с помощью функции random (0 <= l <= m-1). l - индекс массива.
4) далее имеется условие :
Если случайная величина (random (m)) < 2 (0 <= random (m) <= m-1),
То x1 = x/2 + a[l]
y1 = y/2 + b[l]
иначе (в других случаях)
x1 = (x*a[l] + y*b[l] + x*x*b[l]) / 6;
y1 = (y*a[l] - x*b[l] + x*x*a[l]) / 6;
x=x1;
y=y1;
рисуем точку с координатами x = 320 + ceil (x*140) ceil () - функция (округляет до ближайшего целого
y = 240 + ceil (y*140) значения, которое >= значения в скобках.
и цвет = 2 (зеленый)
5) закрытие графического режима.

void main ()
{
#include <graphics.h>           // подключаем нужные библиотеки
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#define m 3          // m-угольник
 
int main ()
{
     int i,n,l;                 // объявляем переменные
     float x1,y1,x,y;
     float a[m],b[m];
 
     int gd,gm;                   // инициализация графического режима
     gd = DETECT;
     initgraph (&gd, &gm, "EGAVGA.bgi");
 
     x=0; y=0;                        // координаты A (x,y)
     for (i=0; i<m; i++)              
     {
           a[i] = cos (2*M_PI * i/m);         
           b[i] = sin (2*M_PI * i/m);
     }
     while (!kbhit ())                    // Выполняется цикл, пока не нажана клавиша
     {
           l = random (m);                      // присвоение l случайной величины (0<l<m-1)
           if (random (m) < 2)                    // 1 случай   
           {
                   x1 = x/2 + a[l];
                   y1 = y/2 + b[l];
           }
           else                                   // 2 случай
           {
                  x1 = (x*a[l] + y*b[l] + x*x*b[l])/ 6;
                  y1 = (y*a[l] - x*b[l] + x*x*a[l])/ 6;
           }
           x=x1;                                         // присвоение значений новым переменным
           y=y1;
           putpixel (320 + ceil (x*140), 240 + ceil (y*140), 2);     // рисование точки
     }
 
     getch ();                                          // задержка 
     closegraph ();                                     // закрытие графического режима
return 0;
}        
}

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