Koch Curve


/****************************************************************

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();

}







Post a Comment

0 Comments