#include #include #include class Couleur; class RGB; class Image; class point3d; class vecteur3d; class rayon; class sphere; class source; class maillon; class listesol; class Couleur { private : unsigned short red; unsigned short green; unsigned short blue; public : Couleur (unsigned int rot, unsigned int grun, unsigned int blau); Couleur () { }; unsigned short getRed () {return red;} ; unsigned short getGreen () {return green;} ; unsigned short getBlue () {return blue;} ; }; class RGB { private : double r; double g; double b; public : RGB () {}; RGB ( double red, double green, double blue); Couleur convertir (); double getr(); /* retourne la valeur de la composante verte de la couleur*/ double getb(); /* retourne la valeur de la ccmposante bleue de la couleur*/ double getg(); /* retourne la valeur de la ccmposante bleue de la couleur*/ friend RGB somme(RGB a,RGB b); /* retourne une couleur RGB égale à la somme des deux couleurs RGB a et b */ friend RGB mul(double a,RGB b); /* retourne une couleur RGB d'intensité égale à la multiplication par le coefficient a de l'intensité de la couleur b*/ }; class Image { private : int nbLig, nbCol; Couleur * pixel; public : Image ( int nbLignes, int nbColonnes); void save (char nomFichier []); void setCouleur (int i, int j, Couleur val); Couleur getCouleur (int i, int j); }; class point3d{ public: double x,y,z; /* x,y et z sont les coordonnées du point */ point3d(); /* constructeur vide */ point3d(double xx, double yy, double zz); /* creer un point à partir des coordonnées xx,yy,zz */ void translate(vecteur3d v); /* translate le point par le vecteur v */ void ecrire(); /* ecrit les informations du point (coordonnées) */ friend double distance(point3d p1, point3d p2); /* retourne la distance entre les deux points */ }; class vecteur3d{ public: double x,y,z; /* x,y et z sont les coordonnées du vecteur */ vecteur3d(); /*constructeur vide */ vecteur3d(double xx, double yy, double zz); /*creer un vecteur à partir des coordonnées xx,yy,zz */ vecteur3d(point3d p1, point3d p2); /* creer un vecteur à partir des points p1 et p2 */ void ecrire(); /*écrit lis informations du vecteur (coordonnées)*/ friend vecteur3d somme(vecteur3d v1,vecteur3d v2); /* retourne le vecteur somme des vecteurs v1 et v2 */ double norme(); /* calcule la norme du vecteur */ friend vecteur3d mul(double lamba,vecteur3d v); /* retourne le vecteur v multiplié par le scalaire lamba */ friend double prodscal(vecteur3d v1, vecteur3d v2); /* retourne le produit scalaire entre v1 et v2 */ friend vecteur3d projection(vecteur3d v, vecteur3d n); /* retourne le vecteur qui correspond au projete du vecteur v sur le plan de normale le vecteur n*/ }; class rayon{ private: point3d origine; /*le point origine est l'origine du rayon */ vecteur3d direction; /* le vecteur direction est le vecteur directeur du rayon */ public: rayon(); /*constructeur vide */ rayon(point3d a,vecteur3d b); /* creer un rayon d'origine a et de vecteur b */ vecteur3d raydirection(); /* retourne le vecteur direction du rayon */ point3d rayorigine(); /* retourne le point origine du rayon */ void ecrire(); /* affiche les informations sur le rayon (coordonées du point et du vecteur)*/ }; class sphere{ private: RGB couleur; /* la couleur RGB couleur est la couleur aplliquée à la sphere */ point3d centre; /* centre est le point centre de la sphere */ double r; /* r est la valeur du rayon de la sphere */ public: sphere(); /*constructeur vide */ sphere(point3d center,double radius,RGB color); /* creer une sphere de centre le point center de rayon radius et de couleur color */ point3d intersection(rayon ray); /* retourne le point d'intersection du rayon ray et de la sphere */ vecteur3d calculnormale(point3d a); /* retourne le vecteur normal (normé) à la sphere au point a */ void ecrire(); /* affiche les informations de la sphere (coordonnées du point et rayon)*/ RGB getcolor(); /* retourne la couleur de la sphere */ }; class source{ private: point3d origine; /* le point3d origines est le point où se situe la sphere */ RGB couleur; /* la couleur RGB couleur est la couleur diffusée par la source lumineuse */ public: source(); /* constructeur vide*/ source(point3d a,RGB b); /* creer une source au point a de couleur d'éclairage b*/ point3d getorigine(); /* retourne le point d'origines de la source */ RGB getcouleur(); /* retourne la couleur d'éclairage de la source */ rayon rayonp3ds(point3d a); /* retourne le rayon passant par l'origine de la source et le point a d'origine la source */ int test(point3d a,listesol c); /* retourne 1 si le point a est cache de la source par une sphere de la liste de sphere c sinon retourne 0*/ }; class maillon{ public: sphere ps; /* la classe maillon permet de faire une liste chainée de sphere */ maillon * suiv; }; class listesol{ private: maillon * premier; public: listesol(); /*constructeur vide */ void ajoute0(); /*creer un maillon vierge en tout début le liste*/ void ajoute(sphere solp); /*ajoute une sphere à la liste définie */ maillon * suivant(); /* retourne un pointeur vers le maillon suivant de la liste */ maillon *first(); /* retourne un pointeur egal au maillon en tete de la liste (qui pointe sur le premier maillon de la liste)*/ };