Question
#include #include #include #include using namespace std; struct point { int x, y; // constructor point(int _x = 0, int _y = 0){ x =
#include
using namespace std;
struct point { int x, y;
// constructor point(int _x = 0, int _y = 0){ x = _x; y = _y; } };
// struct for rgb-pixel, holds red, green and blue values struct rgb { int r, g, b;
// constructor rgb(int _r = 0, int _g = 0, int _b = 0){ r = _r; g = _g; b = _b; } };
class PPMImage { public:
PPMImage(int width, int height){ w = width; h = height; // create pointer to pointers pixmap = new rgb*[h]; // initiliaze each pointer for (int i = 0; i < h; ++i) pixmap[i] = new rgb[w]; }
// copy constructor something I learn, copies data from another PPMImage object // arguments: // other - another image PPMImage(PPMImage &other) { copy(other); }
// assignment operator, clears image and copies data from another one // arguemnts: // other another image const PPMImage& operator=(PPMImage &other) { clear(); copy(other);
// return reference to current image something I learned return *this; }
// destructor, clears data ~PPMImage() { clear(); }
// fiils image with one colour // arguments: // col - fill colour void fill(rgb col) { // loop and assign put col in each pixel for (int i = 0; i < h; ++i) { for (int j = 0; j < w; ++j) { pixmap[i][j] = col; } } }
// draws circle // arguments: // c - center point // rx - x radius // ry - y radius // col - line colour void draw_circle(point c, int r, rgb col) { // current `x` and `y` int x = 0, y = -r; // previous `x` and `y` int _x = x, _y = y; // compute r^2 only once int rr = r * r;
while (_y < r) { // compute next `x` y = _y + 1, x = round(sqrt(rr-y*y));
// move `x` and `y` by center coordinates x += c.x; y += c.y; _x += c.x; _y += c.y;
// draw compute `x` pixmap[y][x] = col;
// draw reflected `x` pixmap[y][2 * c.x - x] = col;
// connect previous points with current ones draw_line(point(_x, _y), point(x, y), col); draw_line(point(2 * c.x - x, y), point(2 * c.x - _x, _y), col);
// move previous _x = x - c.x, _y = y - c.y; } }
// draws line between two points // e.g. line between (1,1) and (8,4) // arguments: // p1 - first point // p2 - second point // col - line color void draw_line(point p1, point p2, rgb col) { // swap points so p1.x if lesser than p2.x if (p1.x > p2.x) { point temp = p1; p1 = p2; p2 = temp; }
// loop increment value int dy = p1.y < p2.y ? 1 : -1, **********************PLEASE EXPLAIN P2.Y ? 1: -1 WHAT IS THIS DOING // length of the each subline len = (p2.x - p1.x + 1) / (abs(p1.y - p2.y) + 1);
// draw each subline while (p1.y != p2.y) { for (int i = 0; i < len; ++i) { pixmap[p1.y][p1.x++] = col; }
p1.y += dy; }
// fill remaining pixels while (p1.x < p2.x) { pixmap[p2.y][p1.x++] = col; } }
// prints image to file bool print_to_file(string filename) { ofstream out(filename.c_str()); // couldn't open file if (!out){ return false; }
out << "P3" << endl; out << w << " " << h << endl; out << 255 << endl;
// fill each pixel for (int i = 0; i < h; ++i) { for (int j = 0; j < w; ++j) { rgb &col = pixmap[i][j]; out << col.r << " " << col.g << " " << col.b << endl; } }
return true; } // image width and height int w, h; // image pixels // I know you said not use double pointers rgb **pixmap;
// clears image content void clear() { for (int i = 0; i < h; ++i) delete[] pixmap[i];
w = 0, h = 0; delete[] pixmap; }
// copies data from another image void copy(PPMImage &other) { w = other.w, h = other.h; pixmap = new rgb*[h]; for (int i = 0; i < h; ++i) { pixmap[i] = new rgb[w]; for (int j = 0; j < w; ++j) pixmap[i][j] = other.pixmap[i][j];
} } };
// some constants int WIDTH = 320, HEIGHT = 240, R = 100;
// circle center point point CENTER = point(160, 120); // colors for background and line rgb LIGHT_GRAY = rgb(245, 245, 245), BLACK = rgb(0, 0, 255);
int main() { // create image PPMImage img(WIDTH, HEIGHT); // fill background img.fill(LIGHT_GRAY); // draw a black circle img.draw_circle(CENTER, R, BLACK); // print image img.print_to_file("img.ppm");
return 0; }
**** PLEASE EXPLAIN LINE 133 MARKED ABOVE THANKS C++
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started