Untitled

Anonymous
plain_text
03/04/2026 6:56 AM
2.2 KB
12
Indexable
#include <GL/glut.h>
#include <stdlib.h>
#include <math.h>

/* DDA */
void drawLineDDA(int x1, int y1, int x2, int y2)
{
    float dx = x2 - x1;
    float dy = y2 - y1;
    int steps = abs(dx) > abs(dy) ? abs(dx) : abs(dy);

    float xInc = dx / steps;
    float yInc = dy / steps;

    float x = x1, y = y1;

    glBegin(GL_POINTS);
    for(int i = 0; i <= steps; i++)
    {
        glVertex2i(round(x), round(y));
        x += xInc;
        y += yInc;
    }
    glEnd();
}

/* Bresenham */
void drawLineBresenham(int x1, int y1, int x2, int y2)
{
    int dx = abs(x2 - x1), dy = abs(y2 - y1);
    int sx = (x1 < x2) ? 1 : -1;
    int sy = (y1 < y2) ? 1 : -1;
    int err = dx - dy;

    glBegin(GL_POINTS);
    while (1)
    {
        glVertex2i(x1, y1);
        if (x1 == x2 && y1 == y2) break;
        int e2 = 2 * err;

        if (e2 > -dy) { err -= dy; x1 += sx; }
        if (e2 < dx)  { err += dx; y1 += sy; }
    }
    glEnd();
}

void display()
{
    glClear(GL_COLOR_BUFFER_BIT);

    glColor3f(0, 0, 1);  // BLUE

    // Vertical stem of K (DDA)
    drawLineDDA(150, 200, 150, 300);

    // Upper diagonal (Bresenham)
    drawLineBresenham(150, 300, 200, 250);

    // Lower diagonal (Bresenham)
    drawLineBresenham(150, 200, 200, 250);

    glFlush();
}

void init()
{
    glClearColor(1,1,1,1);
    glPointSize(2);
    gluOrtho2D(0,400,0,400);
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(400,400);
    glutCreateWindow("Letter K - Blue");
    init();
    glutDisplayFunc(display);
    glutMainLoop();
}
Editor is loading...
Leave a Comment