This commit is contained in:
2020-01-09 23:12:12 +01:00
parent 7d6da47892
commit 4bc1110dd1
7 changed files with 548 additions and 0 deletions
+116
View File
@@ -0,0 +1,116 @@
#include <string>
#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];
}