/*
    points1.c

    - Zeichnet eine einfache Figur aus "Punkten".
    - Programm-Ende durch Drücken einer Taste.


    > Warum ist die gezeichnete Figur ein Kreis?

    > Der Radius des Kreises ist r=0.7.
      Wie groß ist wohl der Koordinatenbereich des Fensters?
      (Es wird im Programm kein Bereich explizit eingestellt,
      es arbeitet also mit einer "default"-Einstellung.)

    > Wenn man die Formeln x=... y=... ändert,
      ergeben sich andere "Kurven". Ausprobieren!
      (z.B. Gerade, oder Parabel, oder "Acht" --- oder einfach
      eine Formel ausdenken und sehen, was passiert).

    > Jeder Punkt soll nun eine andere Farbe bekommen,
      z.B. anhand einer Grauskala: der erste Punkt weiss und dann
      dann dunkler werdend bis zum letzten, schwarzen Punkt.
      (Tip: glColor3f direkt vor glVertex2f aufrufen
      und "Formel" für die Werte von glColor3f ausdenken).

    > Was passiert mit: glPointSize (0)?
      Warum ist es deshalb mehr als nützlich, am Ende der display_func()
      die Funktion glutReportErrors() aufzurufen?

    > Was geschieht, wenn man in der for-Schleife,
      also zwischen glBegin(...) und glEnd() die Funktion
      glPointSize(...) aufruft, um die Punktgröße zu variieren?

    > Wie muß man also vorgehen, wenn nicht nur die Farbe,
      sondern auch die Punktgröße von Punkt zu Punkt verändert
      werden soll?
*/



# include       <stdio.h>
# include       <stdlib.h>
# include       <math.h>
# include       <GL/gl.h>
# include       <GL/glut.h>



static void     display_func (void)
/*********************************/
{
    int         i,
                n = 100;
    float       phi,
                r = 0.7,
                x, y;

    /* printf ("display_func()\n"); */

    glClearColor (1, 1, 1, 0);
    glClear (GL_COLOR_BUFFER_BIT);

    glColor3f (0, 0, 0);
    glPointSize (4);

    glBegin (GL_POINTS);
    for (i = 0; i < n; i ++)
    {
        phi = 2 * M_PI * i / (float) n;
        x = r * cos (phi);
        y = r * sin (phi);
        glVertex2f (x, y);
    }
    glEnd ();

    glFlush ();
    glutReportErrors ();
}



static void     keyboard_func (unsigned char key, int x, int y)
/*************************************************************/
{
    exit (0);
}



extern int      main (int argc, char **argv)
/******************************************/
{
    glutInit (&argc, argv);
    glutInitDisplayMode (GLUT_RGB);

    glutInitWindowPosition (200, 100);
    glutInitWindowSize (600, 600);
    glutCreateWindow ("points1");

    glutDisplayFunc (display_func);
    glutKeyboardFunc (keyboard_func);

    glutMainLoop ();

    return 0;
}


