Построить фрактал "Звезда".
Для построения фрактала "Звезда" мы используем два массива вспомогательных коэффициентов 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;
}