/****************************************************************
PROBLEM STATEMENT -
GENERATE
FRACTAL PATTERNS BY USING KOCH CURVES.
*****************************************************************/
#include<GL/glut.h>
#include<math.h>
#include<stdio.h>
int i;
void koch(int x1, int y1, int x2, int y2, int
i)
{
float angle = 60*M_PI/180;
int
x3 = (2*x1 + x2)/3;
int
y3 = (2*y1 + y2)/3;
int
x4 = (x1 + 2*x2)/3;
int
y4 = (y1 + 2*y2)/3;
int
x = x3+(x4-x3)*cos(angle)+(y4-y3)*sin(angle);
int
y = y3-(x4-x3)*sin(angle)+(y4-y3)*cos(angle);
if(i > 0)
{
koch(x1,y1,x3,y3,i-1);
koch(x3,y3,x,y,i-1);
koch(x,y,x4,y4,i-1);
koch(x4,y4,x2,y2,i-1);
}
else
{
glBegin(GL_LINES);
glVertex2i(x1,y1);
glVertex2i(x3,y3);
glEnd();
glBegin(GL_LINES);
glVertex2i(x3,y3);
glVertex2i(x,y);
glEnd();
glBegin(GL_LINES);
glVertex2i(x,y);
glVertex2i(x4,y4);
glEnd();
glBegin(GL_LINES);
glVertex2i(x4,y4);
glVertex2i(x2,y2);
glEnd();
glFlush();
}
}
void Display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1,0,0);
glBegin(GL_LINES);
glVertex2i(150,150);
glVertex2i(325,453);
glVertex2i(325,453);
glVertex2i(500,150);
glVertex2i(500,150);
glVertex2i(150,150);
glEnd();
glColor3f(0,0,1);
koch(325,453,150,150,i);
koch(500,150,325,453,i);
koch(150,150,500,150,i);
}
void init()
{
glClearColor(1,1,1,0);
glColor3f(0,0,0);
gluOrtho2D(0,640,0,480);
}
int main(int argc, char **argv)
{
printf("\n*Enter the number of iterations: ");
scanf("%d",&i);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(640,480);
glutInitWindowPosition(500,500);
glutCreateWindow("KOCH CURVE");
glutDisplayFunc(Display);
init();
glutMainLoop();
}
0 Comments