Untitled

 avatar
unknown
c_cpp
2 years ago
1.7 kB
10
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...