Midpoint algo reference: http://www.eazynotes.com/notes/computer-graphics/algorithms/mid-point-circle-algorithm.pdf
http://suraj1693.blogspot.com/2013/11/c-program-for-drawing-circle-using.html
https://birunthag.blogspot.com/2014/05/openglc-draw-circle-with-midpoint.html
https://www.opengl.org/discussion_boards/showthread.php/169955-using-glutKeyboardFunc
Code:
#include <windows.h> #include <GL\glut.h> #include <stdlib.h> #include<iostream> #include<stdio.h> using namespace std; int r,p,flags=0; void myInit (void) { glClearColor(0.0,0.0,0.0,0.0); // sets background color to white // sets a point to be 4x4 pixels glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, 500.0, 0.0, 400.0); // the display area in world coordinates. } void midpoint() { r=20; p=1-r; int xk=0; int yk=r; int xc=200; int yc=200; while(xk<=yk) { if(p<0) { xk++; p=p+2*xk+3; } else if(p>0) { xk++; yk=yk-1; p=p+2*xk-2*yk+5; } glVertex2i(xc+xk,yc+yk); glVertex2i(xc-xk,yc+yk); glVertex2i(xc+xk,yc-yk); glVertex2i(xc-xk,yc-yk); glVertex2i(xc+yk,yc+xk); glVertex2i(xc-yk,yc+xk); glVertex2i(xc+yk,yc-xk); glVertex2i(xc-yk,yc-xk); } } void processKey(unsigned char key, int x, int y) { switch(key){ case '1': flags=1; printf("Hello world!"); break; //default: // break; } } void myDisplay(void) { //int nol = rand() % 100; glClear(GL_COLOR_BUFFER_BIT); // clears the screen // setsthe drawing colour glPointSize(4.0); glColor3f(1.0f,0.0f,1.0f) ; glBegin(GL_LINES); glVertex2i(0,200); glVertex2i(500,200); glVertex2i(255,0); glVertex2i(255,500); glEnd(); glBegin(GL_POINTS); //midpoint(); if(flags==1){ midpoint(); } glEnd(); glFlush(); // sends all output to display; } int main (int argc, char **argv) { //scanf("%d,%d,&d,&d",&x,&y,&a,&b); glutInit (&argc, argv); // to initialize the toolkit; glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); // sets the display mode glutInitWindowSize (640, 480); // sets the window size glutInitWindowPosition (10, 10); // sets the starting position for the window glutCreateWindow ("My first OpenGL program!"); // creates the window and sets the title glutKeyboardFunc(processKey); glutDisplayFunc (myDisplay); myInit(); // additional initializations as necessary glutMainLoop(); // go into a loop until event occurs return 0; }