#include #include "pgm.hh" // Komplexe Zahl struct Complex { double real; double imag; }; class Canvas { public : // Konstruktor, erzeuge int* _pixels Canvas(double center_x, double center_y, double width, double height, int horPixels, int vertPixels); // Desktruktor, raeume int* _pixels auf ~Canvas(); // gibt die Breite des Bildes zurueck double width(); // gibt die Hoehe des Bildes zurueck double height(); // gibt die Anzahl an horizontalen Pixeln int horPixels(); // gibt die Anzahl an vertikalen Pixeln int vertPixels(); // gebe die Koordinaten des Pixels (i,j) als Complex zurueck Complex coord(int i, int j); // schreibe value an den Pixel (i,j) // Ueberlegen Sie wie aus (i,j) den flachen Index bei row-major bekommen void writePixel(int i, int j, int value); // Zugang zum Pixel (i,j) im 1D Array // Ueberlegen Sie wie aus (i,j) den flachen Index bei row-major bekommen int operator()(int i, int j); // schreibe Bild mit Dateinamen filename void write(std::string filename); private : double _center_x; double _center_y; double _width; double _height; int _horPixels; int _vertPixels; int* _pixels; }; // diese Methode ist bereits implementiert void Canvas::write(std::string filename) { write_pgm(_pixels,_horPixels,_vertPixels,filename); } Canvas::Canvas(double center_x, double center_y, double width, double height, int horPixels, int vertPixels) { // initialize all values _center_x = center_x; _center_y = center_y; _width = width; _height = height; _horPixels = horPixels; _vertPixels = vertPixels; _pixels = new int[horPixels * vertPixels]; } Canvas::~Canvas() { _pixels = 0; } double Canvas::width() { return _width; } double Canvas::height() { return _height; } int Canvas::horPixels() { return _horPixels; } int Canvas::vertPixels() { return _vertPixels; } Complex Canvas::coord(int i, int j) { Complex c; // Bringe die Pixel mit den echten Laengen ins Verhaeltnis double y = i * (_height / _vertPixels) - _height / 2; double x = j * (_width / _horPixels) - _width / 2; // Gebe die Koordinaten in Relation zum gewuenschten Zentrum aus c.imag = y + _center_y; c.real = x + _center_x; return c; } void Canvas::writePixel(int i, int j, int value) { // i = Zeile und wegen row-major Konvention muss i mit der Zahl der horizontalen // Pixel multipliziert werden _pixels[i*_horPixels + j] = value; } int Canvas::operator()(int i, int j) { // i = Zeile und wegen row-major Konvention muss i mit der Zahl der horizontalen // Pixel multipliziert werden return _pixels[i*_horPixels + j]; }