/* 7.feladat
Rajzoljuk meg az y = x^2 függvény grafikonját! */
/* a "j" "k" billentyûre változik a beosztás finomsága
*/
#include "stdafx.h"
#define FOK 3
static double beosztas = 30;
double a[FOK] = { 1, 0, 0};

void init()
{
     glClearColor(1.0,1.0,1.0,1.0);
     glMatrixMode(GL_PROJECTION);
     glLoadIdentity();
     gluOrtho2D(-25.0,25.0,-25.0,25.0);

}
void keyboard(unsigned char key, int x, int y)
{
     switch(key) {
     case 27:
          exit(0);
          break;
     case 'j':
          beosztas += 2.0;
          glutPostRedisplay();
          break;
     case 'k':
          if(beosztas > 2.0)
               beosztas -= 2.0;
          glutPostRedisplay();
          break;
     default:
      break;
     }
}
double horner(double ertek)
{
     double *seged;
     seged = (double *)malloc(FOK*sizeof(double));
     seged[0] = a[0];
     for(int i = 1; i < FOK; i++) {
          seged[i] = ertek*seged[i-1] + a[i];
     }
     return seged[FOK-1];
     free(seged);
}

void display()
{
     double leptetes = 50.0 / beosztas;
     double akt = -25.0;
     double v1,v2;
     glClear(GL_COLOR_BUFFER_BIT);
     glColor3d(0.0,0.0,0.0);
     glLineWidth(1.0);
     glBegin(GL_LINES);  //a tengelyek
          glVertex2d(-25.0,0.0);
          glVertex2d(25.0,0.0);
          glVertex2d(0.0,-25.0);
          glVertex2d(0.0,25.0);
     glEnd();
     glBegin(GL_LINE_STRIP); //a grafikon kirajzolása
          while(akt < 25.0) {
               v1 = horner(akt);
               glVertex2d(akt,v1);
               akt += leptetes;
               v2 = horner(akt);
               glVertex2d(akt,v2);
               akt += leptetes;
          }
     glEnd();
     glFlush();
}

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
  // TODO: Place code here.
     glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
     glutInitWindowSize(200,200);
     glutInitWindowPosition(100,100);
     glutCreateWindow("g");
     init();
     glutKeyboardFunc(keyboard);
     glutDisplayFunc(display);
     glutMainLoop();
     return 0;
}