Фрактал "Звезда"

"Звезда"

Построить фрактал "Звезда".

Для построения фрактала "Звезда" мы используем два массива вспомогательных коэффициентов float a[25], b[25]. float x, y, x1, y1; - переменные хранящие значение координат и вспомогательные переменные, для счетчика цикла, параметра плотности и переменной для результата работы генератора случайных чисел.
После инициализации графики, в цикле мы вычисляем значения массивов коэффициентов.
Следующим циклом мы вычисляем координаты точек фрактала. Вычисления каждой координаты разбиты на два этапа для упрощения. Сначала мы используя значение предыдущей координаты и значение из массива коэффициентов делаем предварительный расчет вспомогательной переменной x1/y1
x1 = (x/(x*x + y*y))/3 + a[c];
y1 = (-y/(x*x + y*y))/3 + b[c];
, а после этого уже вычисляем новое значение координаты x/y.
x = x1 / (x1*x1 + y1*y1);
y = y1 / (x1*x1 + y1*y1);
отрисовку точек делаем с учетом того что фрактал строится центром из начала координат, поэтому в рисовании точек мы учитываем размеры экрана.
putpixel(ceil(x*70+320), ceil(y*70+240), RED);

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
 
int i, m, c;
float x, y, x1, y1;
float a[25], b[25];
 
 
int main(void)
{
   /* request auto detection */
   int gdriver = DETECT, gmode, errorcode;
 
   /* initialize graphics and local variables */
   initgraph(&gdriver, &gmode, "D:\\BC31\\BGI");
 
   /* read result of initialization */
   errorcode = graphresult();
   /* an error occurred */
   if (errorcode != grOk)
   {
      printf("Graphics error: %s\n", grapherrormsg(errorcode));
      printf("Press any key to halt:");
      getch();
      exit(1);
   }
 
   x=1; y=1; m=5;  //m = 3,4,5
 
   setcolor(RED);
 
   for(i=0; i < m; i++)
   {
      a[2*i] = cos(2*M_PI * (i+1) / m);
      b[2*i] = sin(2*M_PI * (i+1) / m);
      a[2*i+1] = 0.5*(cos(2*M_PI * (i+1) / m) + cos(2*M_PI * i / m));
      b[2*i+1] = 0.5*(sin(2*M_PI * (i+1) / m) + sin(2*M_PI * i / m));
   }
 
   randomize();
 
   do
   {
      c = random(2*m);
      x1 = (x/(x*x + y*y))/3 + a[c];
      y1 = (-y/(x*x + y*y))/3 + b[c];
      x = x1 / (x1*x1 + y1*y1);
      y = y1 / (x1*x1 + y1*y1);
      putpixel(ceil(x*70+320), ceil(y*70+240), RED);
 
   } while (!kbhit());
 
   getch();
   closegraph();
   return 0;
}

ВложениеРазмер
STAR.zip27.33 кб