Program 1:
#include<GL/glut.h> #include<iostream> #include <math.h> using namespace std; void myInit() { gluOrtho2D(0,600,0,600); //glOrtho(0, 600, 600, 0, 0, 1); glClearColor(1,1,1,1); glColor3f(1,0,1); } void plotpixel(int x,int y) { glPointSize(4); glBegin(GL_POINTS); glVertex2i(x,y); glEnd(); glFlush(); } void octant(int xc,int yc,int x,int y) { plotpixel(xc+x,yc+y); plotpixel(xc+y,yc+x); plotpixel(xc+x,yc-y); plotpixel(xc+y,yc-x); plotpixel(xc-x,yc+y); plotpixel(xc-y,yc+x); plotpixel(xc-x,yc-y); plotpixel(xc-y,yc-x); } //convert the rad to deg double ang(int q) { return (double)q * 3.142 / 180; } // To draw the center point void Point(int x, int y) { glPointSize(5); glBegin(GL_POINTS); glVertex2i(x, y); glEnd(); } void circleMP(int xc, int yc, int r) { int p = 1 - r, x = 0, y = r; //loop til the x become y equal to radius (r,r) Point(xc,yc); while (x < y) { octant(xc, yc, x, y); x++; //if p>0 decrement the y and2(x-y)+1 if (p > 0) { y--, p += 2 * (x - y) + 1; } //if p<=0 add 2x+1 to p else { p += 2 * x + 1; } } } void drawcircles(int x, int y, int r) { // First 90 degree int i,j = 1; circleMP(x,y,r); for( i=0;i<10;i+=2) { circleMP(x + (2+i) * r * cos(ang(60)), y - (1+j) * r * sin(ang(60)), r); circleMP(x - (2+i) * r * cos(ang(60)), y - (1+j) * r * sin(ang(60)), r); j+=2 ; } // Bottom 90 degree cout<<i; for( i=i;i>0;i-=2) { circleMP(x + (i-2) * r * cos(ang(60)), y - (j+1) * r * sin(ang(60)), r); circleMP(x - (i-2) * r * cos(ang(60)), y - (j+1) * r * sin(ang(60)), r); j+=2; } } void drawShape() { myInit(); drawcircles(300, 500, 20); } int main(int argc,char **argv) { glutInit(&argc,argv); glutInitWindowSize(600,600); glutInitWindowPosition(300,150); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutCreateWindow("Ring Ring Pattern"); glutDisplayFunc(drawShape); glutMainLoop(); return 0; }Output:
Program 2:
#include<GL/glut.h> #include<iostream> #include <math.h> using namespace std; void myInit() { gluOrtho2D(0,600,0,600); //glOrtho(0, 600, 600, 0, 0, 1); glClearColor(1,1,1,1); glColor3f(1,0,1); } void plotpixel(int x,int y) { glPointSize(4); glBegin(GL_POINTS); glVertex2i(x,y); glEnd(); glFlush(); } void octant(int xc,int yc,int x,int y) { plotpixel(xc+x,yc+y); plotpixel(xc+y,yc+x); plotpixel(xc+x,yc-y); plotpixel(xc+y,yc-x); plotpixel(xc-x,yc+y); plotpixel(xc-y,yc+x); plotpixel(xc-x,yc-y); plotpixel(xc-y,yc-x); } //convert the rad to deg double ang(int q) { return (double)q * 3.142 / 180; } // To draw the center point void Point(int x, int y) { glPointSize(5); glBegin(GL_POINTS); glVertex2i(x, y); glEnd(); } void circleMP(int xc, int yc, int r) { int p = 1 - r, x = 0, y = r; //loop til the x become y equal to radius (r,r) Point(xc,yc); while (x < y) { octant(xc, yc, x, y); x++; //if p>0 decrement the y and2(x-y)+1 if (p > 0) { y--, p += 2 * (x - y) + 1; } //if p<=0 add 2x+1 to p else { p += 2 * x + 1; } } } void drawcircles(int x, int y, int r) { circleMP(x + 2 * r * cos(ang(60)), y - 1 * r * sin(ang(60)), r); circleMP(x + 6 * r * cos(ang(60)), y - 2 * r * sin(ang(60)), r); circleMP(x + 8 * r * cos(ang(60)), y - 4 * r * sin(ang(60)), r); circleMP(x + 6 * r * cos(ang(60)), y - 6 * r * sin(ang(60)), r); circleMP(x + 2 * r * cos(ang(60)), y - 7 * r * sin(ang(60)), r); circleMP(x - 2 * r * cos(ang(60)), y - 1 * r * sin(ang(60)), r); circleMP(x - 6 * r * cos(ang(60)), y - 2 * r * sin(ang(60)), r); circleMP(x - 8 * r * cos(ang(60)), y - 4 * r * sin(ang(60)), r); circleMP(x - 6 * r * cos(ang(60)), y - 6 * r * sin(ang(60)), r); circleMP(x - 2 * r * cos(ang(60)), y - 7 * r * sin(ang(60)), r); } void drawShape() { myInit(); drawcircles(300, 400, 20); } int main(int argc,char **argv) { glutInit(&argc,argv); glutInitWindowSize(600,600); glutInitWindowPosition(300,150); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutCreateWindow("Ring Ring Pattern"); glutDisplayFunc(drawShape); glutMainLoop(); return 0; }Output: