sidrs

CGR Ass 1

Aug 1st, 2024 (edited)
375
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.74 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <graphics.h>
  4.  
  5. using namespace std;
  6.  
  7. class DDA{
  8.     float xi, yi, xf, yf, dx, dy, steps;
  9.     float incX, incY;
  10.     float X, Y;
  11. public:
  12.     void calc(float xs, float ys, float xe, float ye){
  13.         xi = xs; yi = ys; xf = xe, yf = ye;
  14.         dx = (xf - xi); dy = (yf - yi);
  15.         steps = abs(dx) >= abs(dy) ? abs(dx) : abs(dy);
  16.         incX = dx/steps; incY = dy/steps;
  17.         X = xi; Y = yi;
  18.     }
  19.     void drawLine(){
  20.         for (int i = 1; i <= steps; i++){
  21.             putpixel(floor(X), floor(Y), MAGENTA);
  22.             X += incX; Y += incY;
  23.             delay(5);
  24.         }
  25.     }
  26. };
  27.  
  28. class Bresenham {
  29.     int xc, yc, r, xi, yi, p;
  30. public:
  31.     void calc(int XC, int YC, int Radius){
  32.         xc = XC; yc = YC; r = Radius;
  33.         xi = 0; yi = r;
  34.         p = 3-(2*r);
  35.     }
  36.     void drawCircle(){
  37.         while (xi < yi){
  38.             putpixel(xc + xi, yc + yi, YELLOW);
  39.             putpixel(xc - xi, yc + yi, YELLOW);
  40.             putpixel(xc + xi, yc - yi, YELLOW);
  41.             putpixel(xc - xi, yc - yi, YELLOW);
  42.             putpixel(xc + yi, yc + xi, YELLOW);
  43.             putpixel(xc - yi, yc + xi, YELLOW);
  44.             putpixel(xc + yi, yc - xi, YELLOW);
  45.             putpixel(xc - yi, yc - xi, YELLOW);
  46.             xi++;
  47.             if (p < 0){
  48.                 p += ((4 * xi) + 6);
  49.             } else {
  50.                 yi--;
  51.                 p += ((4 * (xi - yi)) + 10);
  52.             }
  53.             delay(1);
  54.         }
  55.     }
  56. };
  57.  
  58. int main() {
  59.     int gd = DETECT, gm;
  60.     int xc = 300, yc = 250, r = 100;   
  61.     Bresenham B1, B2;
  62.     DDA L1, L2, L3;
  63.     initgraph(&gd, &gm, NULL);
  64.  
  65.     B1.calc(xc, yc, r);
  66.     B2.calc(xc, yc, r/2);
  67.     B1.drawCircle();
  68.     B2.drawCircle();
  69.  
  70.     L1.calc(xc, (yc - r), (xc + (r / 1.154)), (yc + (r / 2)));
  71.     L2.calc(xc, (yc - r), (xc - (r / 1.154)), (yc + (r / 2)));
  72.     L3.calc((xc + (r / 1.154)), (yc + (r / 2)), (xc - (r / 1.154)), (yc + (r / 2)));
  73.     L1.drawLine();
  74.     L2.drawLine();
  75.     L3.drawLine();
  76.  
  77.     cin.get();
  78.     closegraph();
  79.     return 0;
  80. }
  81.  
Advertisement
Add Comment
Please, Sign In to add comment