/* File gsm.h (GrauStufenMatrix) HeaderFile zur Berechnung der Graustufenmatrix fuer die Erzeugung von Kaustiken mit der Lieberherr-Methode (www.dpk.ch/Material.htm). Autor Daniel Baumgartner Kantonsschule Baden www.mathematicus.ch eMail _@bluewin.ch */ const double pi=3.1415926; const double grad=pi/180; int sign(int z) { if (z>0) return 1; else if (z<0) return -1; else return 0; }; /* Klasse vek */ class vek { public: double x,y; void def(double,double); vek operator + (vek); vek operator - (vek); vek operator * (double); void dreh(double); void schreibe(); }; vek vek::operator + (vek u) { vek h; h.def(x+u.x,y+u.y); return h; }; vek vek::operator - (vek u) { vek h; h.def(x-u.x,y-u.y); return h; }; vek vek::operator * (double a) { vek h; h.def(a*x,a*y); return h; }; void vek::def(double a,double b) { x=a; y=b; }; void vek::dreh(double phi) { double h=x; x=x*cos(phi)-y*sin(phi); y=h*sin(phi)+y*cos(phi); }; void vek::schreibe() { cout << "{"<deltaY*dy) { parX=dx; parY=0; errD=deltaX*dx; errP=deltaY*dy; pix=deltaX*dx; } else { parX=0; parY=dy; errD=deltaY*dy; errP=deltaX*dx; pix=deltaY*dy; }; int xi=xa; int yi=ya; pixel(xi,yi,p); float d=-errD/2.0; for (int i=0;i0) { d-=errD; xi+=dx; yi+=dy; } else { xi+=parX; yi+=parY; }; pixel(xi,yi,p); }; }; /* Die Pixel einer Strecke berechnen */ void pixel_strecke(pkt a,pkt e,intmat& p) { double k=pix_X/deltax; erzeuge_pixelStrecke( (int)round((a.x-xmin)*k),(int)round((a.y-ymin)*k), (int)round((e.x-xmin)*k),(int)round((e.y-ymin)*k), p); };