Untitled
unknown
c_cpp
3 years ago
1.7 kB
13
Indexable
#include <GL/glut.h>
#include <iostream>
using namespace std;
// Initialize OpenGL
void init() {
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow("Midpoint Ellipse Drawing Algorithm in OpenGL");
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(-100.0, 100.0, -100.0, 100.0);
}
// Draw the ellipse using the midpoint algorithm
void drawEllipse(int a, int b) {
int x = 0, y = b;
float d1 = b * b - a * a * b + a * a / 4.0;
glPointSize(2.0);
glBegin(GL_POINTS);
while (a * a * (y - 0.5) > b * b * (x + 1)) {
if (d1 < 0) {
d1 += b * b * (2 * x + 3);
}
else {
d1 += b * b * (2 * x + 3) + a * a * (-2 * y + 2);
y--;
}
x++;
glVertex2i(x, y);
glVertex2i(-x, y);
glVertex2i(x, -y);
glVertex2i(-x, -y);
}
float d2 = b * b * (x + 0.5) * (x + 0.5) + a * a * (y - 1) * (y - 1) - a * a * b * b;
while (y > 0) {
if (d2 < 0) {
d2 += b * b * (2 * x + 2) + a * a * (-2 * y + 3);
x++;
}
else {
d2 += a * a * (-2 * y + 3);
}
y--;
glVertex2i(x, y);
glVertex2i(-x, y);
glVertex2i(x, -y);
glVertex2i(-x, -y);
}
glEnd();
}
// Display the ellipse
void display() {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
drawEllipse(60, 30);
glFlush();
}
// Main function
int main(int argc, char** argv) {
glutInit(&argc, argv);
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
Editor is loading...