재귀적 프랙탈
함수의 재귀호출
void RecursiveFunc(int n)
{
if( n != 3 )
RecursiveFunc(n+1);
printf("%-3d", n);
}
int main(void)
{
RecursivFunc(0);
return 0;
}예제 프랙탈




Last updated
void RecursiveFunc(int n)
{
if( n != 3 )
RecursiveFunc(n+1);
printf("%-3d", n);
}
int main(void)
{
RecursivFunc(0);
return 0;
}



Last updated
#include "lib\egl.h"
#include <math.h>
using namespace egl;
#define TORAD (0.01745f)
void DrawCircle(GLfloat x, GLfloat y, GLfloat r)
{
glBegin(GL_POINTS);
for(int i=0; i<360; ++i)
{
glVertex2f(x+(r*cos(i*TORAD)), y+(r*sin(i*TORAD)));
}
glEnd();
}
void RecursiveCircle(GLfloat x, GLfloat y, GLfloat r)
{
if(r>1.0f)
{
DrawCircle(x, y, r);
RecursiveCircle(x-r/2, y, r/2); /* x:r/2 감소, r:1/2감소 */
RecursiveCircle(x+r/2, y, r/2); /* x:r/2 증가, r:1/2감수 */
}
}
class RenderWindow : public Window
{
public:
virtual void RenderGLScene(void);
};
void RenderWindow::RenderGLScene(void)
{
Window::RenderGLScene();
glTranslatef(0.0f, 0.0f, -100.0f);
glColor3f(1.0f, 0.0f, 0.0f);
RecursiveCircle(0.0f, 0.0f, 30.0f);
}
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
RenderWindow app;
if(!app.Create(FALSE))
return EXIT_FAILURE;
return app.Run();
}void RecursiveCircle(GLfloat x, GLfloat y, GLfloat r)
{
if(r>1.0f)
{
DrawCircle(x, y, r);
RecursiveCircle(x-r/2, y, r/2);
RecursiveCircle(x+r/2, y, r/2);
RecursiveCircle(x, y-r/2, r/2);
RecursiveCircle(x, y+r/2, r/2);
}
}void RecursiveCircle(GLfloat x, GLfloat y, GLfloat r)
{
if(r>8.0f)
{
DrawCircle(x, y, r/2);
RecursiveCircle(x-r/2, y, r/2);
RecursiveCircle(x+r/2, y, r/2);
RecursiveCircle(x, y-r/2, r/2);
RecursiveCircle(x, y+r/2, r/2);
}
}void RecursiveCircle(GLfloat x, GLfloat y, GLfloat r)
{
if(r>1.0f)
{
if(r<=10.0f)
{
glColor3f(0.0f, 0.5f, 0.0f);
}
else if(r<=30.0f)
{
glColor3f(1.0f, 1.0f, 0.0f);
}
else if(r<=50.0f)
{
glColor3f(1.0f, 0.0f, 1.0f);
}
DrawCircle(x, y, r);
RecursiveCircle(x-r/2, y, r*0.4);
RecursiveCircle(x+r/2, y, r*0.4);
RecursiveCircle(x, y-r/2, r*0.4);
RecursiveCircle(x, y+r/2, r*0.4);
}
}