# HG changeset patch # User Dennis C. M. # Date 1686677843 -3600 # Node ID 40a8bdbe20052dac0316a8d62bf49845aa705405 # Parent 6be2faa7ed6e96574807fdd1451fdf02c185fc8d Refactor to array of structures diff -r 6be2faa7ed6e -r 40a8bdbe2005 algos.c diff -r 6be2faa7ed6e -r 40a8bdbe2005 algos.h diff -r 6be2faa7ed6e -r 40a8bdbe2005 main.c --- a/main.c Tue Jun 13 17:23:52 2023 +0100 +++ b/main.c Tue Jun 13 18:37:23 2023 +0100 @@ -5,8 +5,8 @@ #include -#define HEIGHT 1080 -#define WIDTH 1920 +#define WINDOW_HEIGHT 1080 +#define WINDOW_WIDTH 1920 void setup() { @@ -23,42 +23,56 @@ glLoadIdentity(); // Set the coordinates to be used with the viewport - gluOrtho2D(0, WIDTH, HEIGHT, 0); + gluOrtho2D(0, WINDOW_WIDTH, WINDOW_HEIGHT, 0); } +struct Rectangle { + int width; + int height; + int x_position; +}; + + void display() { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_QUADS); - float x = 1; + float x_position = 1; float rect_width = 5.0; float space = 5.0; - + // Compute max number of rectangles to fit the windows - int max_rects = floor((WIDTH - rect_width) / (rect_width + space)) + x; - - // Initialize empty array with same of `max_rects` - int *unsorted_array = (int*)malloc(max_rects * sizeof(int)); + int max_rects = floor((WINDOW_WIDTH - rect_width) / (rect_width + space)) + x_position; + struct Rectangle *rectangles = malloc(max_rects * sizeof(struct Rectangle)); int rect_counter = 0; + while (rect_counter < max_rects) { - int height = random_int(100, HEIGHT - 100); + struct Rectangle rectangle; + rectangle.width = rect_width; + rectangle.height = random_int(100, WINDOW_HEIGHT - 100); + rectangle.x_position = x_position; + rectangles[rect_counter] = rectangle; - glVertex2f(x, HEIGHT - 100); - glVertex2f(x + rect_width, HEIGHT - 100); - glVertex2f(x + rect_width, height); - glVertex2d(x, height); + draw_rectangle( + rectangle.x_position, + rectangle.height, + rectangle.width, + WINDOW_HEIGHT + ); - x += rect_width + space; + x_position += rect_width + space; rect_counter++; } glEnd(); - + char text[256]; sprintf(text, "Number of elements: %i", rect_counter); - render_text(text, 20.0, HEIGHT - 50); + render_text(text, 20.0, WINDOW_HEIGHT - 50); + + free(rectangles); glFlush(); } @@ -66,7 +80,7 @@ int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); - glutInitWindowSize(WIDTH, HEIGHT); + glutInitWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT); glutCreateWindow("OpenGL Window"); setup(); glutDisplayFunc(display); diff -r 6be2faa7ed6e -r 40a8bdbe2005 utils.c --- a/utils.c Tue Jun 13 17:23:52 2023 +0100 +++ b/utils.c Tue Jun 13 18:37:23 2023 +0100 @@ -13,3 +13,11 @@ int random_int(int min, int max) { return rand() % ((max - min) + 1) + min; } + + +void draw_rectangle(int x_position, int rect_height, int rect_width, int window_height) { + glVertex2f(x_position, window_height - 100); + glVertex2f(x_position + rect_width, window_height - 100); + glVertex2f(x_position + rect_width, rect_height); + glVertex2d(x_position, rect_height); +} diff -r 6be2faa7ed6e -r 40a8bdbe2005 utils.h --- a/utils.h Tue Jun 13 17:23:52 2023 +0100 +++ b/utils.h Tue Jun 13 18:37:23 2023 +0100 @@ -6,6 +6,7 @@ void render_text(const char *text, float x, float y); int random_int(int min, int max); +void draw_rectangle(int x_position, int rect_height, int rect_width, int window_height); #endif