From eb0199c22669a30855cc734389cb94e69315a470 Mon Sep 17 00:00:00 2001 From: barnestr Date: Tue, 5 Apr 2022 01:39:06 -0500 Subject: [PATCH] lab4 submitted --- Lab4/Lab4 | Bin 69600 -> 0 bytes Lab4/main.cpp | 80 ++++++++++++++++++++++++++++++++++++++++++-- Lab4/x11context.cpp | 75 +++++++++++++++++++++++++++++++++-------- Lab4/x11context.h | 1 - 4 files changed, 138 insertions(+), 18 deletions(-) delete mode 100755 Lab4/Lab4 diff --git a/Lab4/Lab4 b/Lab4/Lab4 deleted file mode 100755 index 4f3e1aa42b26fe1c01e9db58b153e99c63f6b8d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69600 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 #include - +using namespace std; + int main(void) { GraphicsContext* gc = new X11Context(800,600,GraphicsContext::BLACK); @@ -11,7 +25,7 @@ int main(void) gc->setColor(GraphicsContext::GREEN); gc->setPixel(10,10); gc->setPixel(30,30); - gc->drawLine(100,100,500,500); + gc->drawLine(100,100,100,500); gc->setColor(GraphicsContext::RED); gc->drawLine(100,500,500,500); gc->setColor(GraphicsContext::BLUE); @@ -20,7 +34,67 @@ int main(void) gc->drawLine(500,100,100,100); gc->setColor(GraphicsContext::MAGENTA); gc->drawCircle(300,300,200); - sleep(10); + sleep(2); + gc->clear(); + + // Random/Negatives Test + gc-> setColor(rand()); + gc->drawLine(-100, 5000, 200, -590); + gc-> setColor(rand()); + gc->drawLine(rand()%800,rand()%600,rand()%800,rand()%600); + gc-> setColor(rand()); + gc->drawLine(rand()%800,rand()%600,rand()%800,rand()%600); + gc-> setColor(rand()); + gc->drawLine(rand()%800,rand()%600,rand()%800,rand()%600); + sleep(5); + gc->clear(); + // End Random/Negatives Test + + // 5000 lines test + // gc->setColor(GraphicsContext::GREEN); + // int total = 0; + // while(total < 5000){ + // for(int i = 0; (i < 800) && (total < 5000); i++){ + // gc->drawLine(i,0,i,600); + // total++; + // } + // gc-> setColor(rand()); + // cout << total << endl; + // } + // cout << total << endl; + // gc->clear(); + // End 5000 lines test + + // Draw boat + gc->setColor(GraphicsContext::YELLOW); + gc->drawLine(250,500,550,500); + gc->drawLine(250,500,150,400); + gc->drawLine(150,400,650,400); + gc->drawLine(650,400,550,500); + gc->drawLine(400,400,400,100); + + gc->drawLine(400,100,300,150); + gc->drawLine(300,150,400,200); + + // Draw waves + gc->setColor(GraphicsContext::BLUE); + gc->drawLine(0,550,100,450); + gc->drawLine(100,450,100,550); + gc->drawLine(100,550,200,450); + gc->drawLine(200,450,200,550); + gc->drawLine(200,550,300,450); + gc->drawLine(300,450,300,550); + gc->drawLine(300,550,400,450); + gc->drawLine(400,450,400,550); + gc->drawLine(400,550,500,450); + gc->drawLine(500,450,500,550); + gc->drawLine(500,550,600,450); + gc->drawLine(600,450,600,550); + gc->drawLine(600,550,700,450); + gc->drawLine(700,450,700,550); + gc->drawLine(700,550,800,450); + + sleep(5); delete gc; diff --git a/Lab4/x11context.cpp b/Lab4/x11context.cpp index bc8f0d1..cb50144 100644 --- a/Lab4/x11context.cpp +++ b/Lab4/x11context.cpp @@ -9,7 +9,9 @@ #include "x11context.h" #include "drawbase.h" #include +#include +using namespace std; /** * The only constructor provided. Allows size of window and background * color be specified. @@ -203,31 +205,76 @@ int X11Context::getWindowHeight() // XDrawLine(display, window, graphics_context, x1, y1, x2, y2); // XFlush(display); // } - + // Bresenham Implementation void X11Context::drawLine(int x1, int y1, int x2, int y2){ - //setPixel(x1,y1); - // Check direction of line + bool steep; if(abs(y2-y1) < abs(x2-x1)){ + // Steep slope + steep = true; if(x1 > x2){ - //swap - } else { - //swap + // Swap to change drawing direction + int temp = x1; + x1 = x2; + x2 = temp; + temp = y1; + y1 = y2; + y2 = temp; } } else { - + // Shallow slope + steep = false; + if(y1 > y2){ + // Swap to change drawing direction + int temp = x1; + x1 = x2; + x2 = temp; + temp = y1; + y1 = y2; + y2 = temp; + } } + // Initilize algorithm values int dx = x2-x1; int dy = y2-y1; int D = 2*dy-dx; - int y = y1; - for(int i = x1; i < x2; i++){ - setPixel(i,y); - if(D > 0){ - y = y+1; - D = D-2*dx; + // Will either be +1 or -1 + int c = 1; + + if(steep){ + // When |dx| > |dy| + if(dy<0){ + c = -1; + dy = -dy; + } + int D = 2*dy-dx; + int y = y1; + for(int i = x1; i < x2; i++){ + setPixel(i,y); + if(D > 0){ + y += c; + D += (2*(dy-dx)); + }else{ + D += 2*dy; + } + } + } else if(!steep){ + // When |dx| < |dy| + if(dx<0){ + c = -1; + dx = -dx; + } + int D = 2*dx-dy; + int x = x1; + for(int j = y1; j < y2; j++){ + setPixel(x,j); + if(D > 0){ + x += c; + D += (2*(dx-dy)); + } else { + D += 2*dx; + } } - D = D+2*dy; } } diff --git a/Lab4/x11context.h b/Lab4/x11context.h index 54a7af1..cec63f4 100644 --- a/Lab4/x11context.h +++ b/Lab4/x11context.h @@ -23,7 +23,6 @@ class X11Context : public GraphicsContext void setPixel(int x, int y); unsigned int getPixel(int x, int y); void clear(); - //void drawLine(int x1, int y1, int x2, int y2); void drawLine(int x1, int y1, int x2, int y2); void drawCircle(int x, int y, unsigned int radius);