Пример. Рекурсивные фигуры.  В    центре    рисунка    -    большая окружность.   На   ней   находятся   центры   четырех   окружностей меньшего  диаметра,  на  каждой  из  которых  -  центры  еще  четырех окружностей  еще  меньшего  диаметра  и  т.д.  Всего  -  N  разных диаметров (N уровней рекурсии).


Процедура  для  рисования  такой  фигуры  принимает  4  параметра  -  координаты  центра базовой окружности (x, y), ее радиус R и количество уровней n, которые надо нарисовать. На следующем  уровне  радиус  изменяется  в  k  раз    примере      k=0.5),  количество  оставшихся уровней  уменьшается  на  1  и  пересчитываются  координаты  для  4-х    окружностей  следующего уровня.


void RecCircle ( float x, float y, float R,

int n )

{

  float k = 0.5;

  circle ( x, y, R );

  if ( n == 1 ) return;

  RecCircle( x+R, y, k*R, n-1);

  RecCircle( x-R, y, k*R, n-1);

  RecCircle( x, y+R, k*R, n-1);

  RecCircle( x, y-R, k*R, n-1);

}

Основная программа получается очень короткой - в ней надо включить монитор в нужный графический  режим,  один  раз  вызвать  процедуру  RecCircle,  сделать  паузу  до  нажатия  на любую клавишу и выключить графический режим.


 #include <conio.h>

#include <graphics.h>

... // сюда надо вставить процедуру

void main()

{

  int d = VGA, m = VGAHI;

  initgraph(&gd, &gm, "c:\\borlandc\\bgi");

  RecCircle ( 320, 240, 100, 3 );

  getch();

  closegraph();

}



2009-12-19 • Просмотров [ 2212 ]