From 00911b0842be4d1a1be7786e7892cd296db17197 Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 23 Jul 2021 23:32:20 +0200 Subject: [PATCH] Reviewed ImageDrawLine() formating --- src/textures.c | 80 ++++++++++++++++++++++---------------------------- 1 file changed, 35 insertions(+), 45 deletions(-) diff --git a/src/textures.c b/src/textures.c index e906980bf..7e986e2a6 100644 --- a/src/textures.c +++ b/src/textures.c @@ -2414,7 +2414,7 @@ void ImageDrawPixelV(Image *dst, Vector2 position, Color color) { ImageDrawPixel(dst, (int)position.x, (int)position.y, color); } - + // Draw line within an image void ImageDrawLine(Image *dst, int startPosX, int startPosY, int endPosX, int endPosY, Color color) { @@ -2423,99 +2423,89 @@ void ImageDrawLine(Image *dst, int startPosX, int startPosY, int endPosX, int en // https://classic.csunplugged.org/wp-content/uploads/2014/12/Lines.pdf int changeInX = (endPosX - startPosX); - int abs_changeInX = (changeInX < 0)? -changeInX : changeInX; + int absChangeInX = (changeInX < 0)? -changeInX : changeInX; int changeInY = (endPosY - startPosY); - int abs_changeInY = (changeInY < 0)? -changeInY : changeInY; + int absChangeInY = (changeInY < 0)? -changeInY : changeInY; - int startU, startV, endU, V_step; // Substitutions, either U = X, V = Y or vice versa. See loop at end of function - //int endV; // This is not needed, but to aid understanding it is left in the code below. - - int A, B, P; // See linked paper above. Explained down in the main loop. - - int is_x_y_reversed = (abs_changeInY < abs_changeInX); + int startU, startV, endU, stepV; // Substitutions, either U = X, V = Y or vice versa. See loop at end of function + //int endV; // Not needed but left for better understanding, check code below + int A, B, P; // See linked paper above, explained down in the main loop + int reversedXY = (absChangeInY < absChangeInX); - if (is_x_y_reversed) + if (reversedXY) { - A = 2*abs_changeInY; - B = A - 2*abs_changeInX; - P = A - abs_changeInX; + A = 2*absChangeInY; + B = A - 2*absChangeInX; + P = A - absChangeInX; - if (changeInX > 0) + if (changeInX > 0) { startU = startPosX; startV = startPosY; endU = endPosX; - //endV = endPosY; + //endV = endPosY; } else { startU = endPosX; startV = endPosY; endU = startPosX; - //endV = startPosY; + //endV = startPosY; - // since start and end are reversed: + // Since start and end are reversed changeInX = -changeInX; changeInY = -changeInY; } - V_step = (changeInY < 0)? -1 : 1; + stepV = (changeInY < 0)? -1 : 1; - ImageDrawPixel(dst, startU, startV, color); // At this point they are correctly ordered... + ImageDrawPixel(dst, startU, startV, color); // At this point they are correctly ordered... } - else // all X and Y are reversed in here: + else { - A = 2*abs_changeInX; - B = A - 2*abs_changeInY; - P = A - abs_changeInY; + A = 2*absChangeInX; + B = A - 2*absChangeInY; + P = A - absChangeInY; if (changeInY > 0) { startU = startPosY; startV = startPosX; endU = endPosY; - //endV = endPosX; + //endV = endPosX; } else { startU = endPosY; startV = endPosX; endU = startPosY; - //endV = startPosX; + //endV = startPosX; - // since start and end are reversed: + // Since start and end are reversed changeInX = -changeInX; changeInY = -changeInY; } - V_step = (changeInX < 0)? -1 : 1; + stepV = (changeInX < 0)? -1 : 1; - ImageDrawPixel(dst, startV, startU, color); // ... but need to be reversed here. Repeated in the main loop below. + ImageDrawPixel(dst, startV, startU, color); // ... but need to be reversed here. Repeated in the main loop below } - // We already drew the start point. If we started at startU+0, the line would be crooked and too short. - for (int U = startU+1, V = startV; U <= endU; U += 1) + // We already drew the start point. If we started at startU + 0, the line would be crooked and too short + for (int u = startU + 1, v = startV; u <= endU; u++) { if (P >= 0) { - V += V_step; // Adjusts whenever we stray too far from the direct line. Details in the linked paper above. - P += B; // Remembers that we corrected our path. - } - else - { - P += A; // Remembers how far we are from the direct line. - } - if (is_x_y_reversed) // Substitutions may be in wrong order for drawing: - { - ImageDrawPixel(dst, U, V, color); - } - else - { - ImageDrawPixel(dst, V, U, color); + v += stepV; // Adjusts whenever we stray too far from the direct line. Details in the linked paper above + P += B; // Remembers that we corrected our path } + else P += A; // Remembers how far we are from the direct line + + if (reversedXY) ImageDrawPixel(dst, u, v, color); + else ImageDrawPixel(dst, v, u, color); } } - + // Draw line within an image (Vector version) void ImageDrawLineV(Image *dst, Vector2 start, Vector2 end, Color color) {