Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

#include #include #include #include using namespace std; struct point { int x, y; // constructor point(int _x = 0, int _y = 0){ x =

#include #include #include #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

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Data Management Databases And Organizations

Authors: Richard T. Watson

3rd Edition

0471418455, 978-0471418450

More Books

Students also viewed these Databases questions