// Graphe de Cayley du groupe symétrique S4, avec les générateurs (1 2), (2 3), (3 4).
// Le graphe est un octaèdre tronqué.

#include "colors.inc"
#include "textures.inc"
#include "shapes.inc"
#include "stones.inc"
#include "woods.inc"                                                
#include "glass.inc"

// ***************************
// Installation de la caméra *
// ***************************
// On installe la caméra et on définit son orientation.
// L'axe des x est vers la droite, l'axe des y vers le haut, l'axe des z vers le fond.


camera {orthographic
#declare DistanceObservateur = 2;
#declare HauteurObservateur = 0.8;
#declare Angle = -2;  // pour une vision stéréoscopique :
                     // < 0 pour l'oeil gauche (G.POV) . L'image devra être placée à DROITE en vision croisée
                     // > 0 pour l'oeil droit (D.POV) (en degré), l'image devra être placée à GAUCHE. 
                     // En général 3 à 5 degré d'écart entre les deux yeux. Angle est en degré. 
//Définir l'angle pour choisir l'oeil

location  <DistanceObservateur*cos(Angle/180*pi), HauteurObservateur, DistanceObservateur*sin(Angle/180*3.142)> 
look_at  <0,0,0>
rotate y*90  // Ne pas modifier (cela tournerait les textes). 
}

// On définit le fond (par défaut noir)

background {color Black}  

// ************
// Dimensions *
// ************

#declare RayonSommet = 0.03;
#declare RayonArete = 0.015;

#declare couleurSommet=Yellow;
#declare couleur12 = Blue;
#declare couleur23 = Red;
#declare couleur34 = Green;

// ********
// Objets *
// ********

#declare A = <0,1,0>;
#declare B = <1,0,0>;
#declare C = <0,0,1>;
#declare D = <-1,0,0>;
#declare E = <0,0,-1>;
#declare F = <0,-1,0>;

#declare S1234 = 2*A/3 + B/3;
#declare S2134 = 2*A/3 + C/3;
#declare S2143 = 2*A/3 + D/3;
#declare S1243 = 2*A/3 + E/3;

#declare S1324 = 2*B/3 + A/3;
#declare S3124 = 2*B/3 + C/3;
#declare S3142 = 2*B/3 + F/3;
#declare S1342 = 2*B/3 + E/3;

#declare S2314 = 2*C/3 + A/3;
#declare S3214 = 2*C/3 + B/3;
#declare S2341 = 2*C/3 + D/3;
#declare S3241 = 2*C/3 + F/3;

#declare S2413 = 2*D/3 + A/3;
#declare S2431 = 2*D/3 + C/3;
#declare S4231 = 2*D/3 + F/3;
#declare S4213 = 2*D/3 + E/3;

#declare S1423 = 2*E/3 + A/3;
#declare S1432 = 2*E/3 + B/3;
#declare S4123 = 2*E/3 + D/3;
#declare S4132 = 2*E/3 + F/3;

#declare S3412 = 2*F/3 + B/3;
#declare S3421 = 2*F/3 + C/3;
#declare S4312 = 2*F/3 + E/3;
#declare S4321 = 2*F/3 + D/3;

// Placement des sommets
union{
sphere{S1234 RayonSommet texture{Silver_Metal} pigment {color couleurSommet}}
sphere{S1243 RayonSommet texture{Silver_Metal} pigment {color couleurSommet}}
sphere{S1324 RayonSommet texture{Silver_Metal} pigment {color couleurSommet}}
sphere{S1342 RayonSommet texture{Silver_Metal} pigment {color couleurSommet}}
sphere{S1423 RayonSommet texture{Silver_Metal} pigment {color couleurSommet}}
sphere{S1432 RayonSommet texture{Silver_Metal} pigment {color couleurSommet}}

sphere{S2134 RayonSommet texture{Silver_Metal} pigment {color couleurSommet}}
sphere{S2143 RayonSommet texture{Silver_Metal} pigment {color couleurSommet}}
sphere{S2314 RayonSommet texture{Silver_Metal} pigment {color couleurSommet}}
sphere{S2341 RayonSommet texture{Silver_Metal} pigment {color couleurSommet}}
sphere{S2413 RayonSommet texture{Silver_Metal} pigment {color couleurSommet}}
sphere{S2431 RayonSommet texture{Silver_Metal} pigment {color couleurSommet}}

sphere{S3124 RayonSommet texture{Silver_Metal} pigment {color couleurSommet}}
sphere{S3142 RayonSommet texture{Silver_Metal} pigment {color couleurSommet}}
sphere{S3214 RayonSommet texture{Silver_Metal} pigment {color couleurSommet}}
sphere{S3241 RayonSommet texture{Silver_Metal} pigment {color couleurSommet}}
sphere{S3412 RayonSommet texture{Silver_Metal} pigment {color couleurSommet}}
sphere{S3421 RayonSommet texture{Silver_Metal} pigment {color couleurSommet}}

sphere{S4123 RayonSommet texture{Silver_Metal} pigment {color couleurSommet}}
sphere{S4132 RayonSommet texture{Silver_Metal} pigment {color couleurSommet}}
sphere{S4213 RayonSommet texture{Silver_Metal} pigment {color couleurSommet}}
sphere{S4231 RayonSommet texture{Silver_Metal} pigment {color couleurSommet}}
sphere{S4312 RayonSommet texture{Silver_Metal} pigment {color couleurSommet}}
sphere{S4321 RayonSommet texture{Silver_Metal} pigment {color couleurSommet}}

// Placement des arêtes
cylinder{S1234 S1324 RayonArete texture{Silver_Metal} pigment {color couleur23}}
cylinder{S2134 S2314 RayonArete texture{Silver_Metal} pigment {color couleur23}}
cylinder{S2143 S2413 RayonArete texture{Silver_Metal} pigment {color couleur23}}
cylinder{S1243 S1423 RayonArete texture{Silver_Metal} pigment {color couleur23}}
cylinder{S1234 S2134 RayonArete texture{Silver_Metal} pigment {color couleur12}}
cylinder{S2143 S1243 RayonArete texture{Silver_Metal} pigment {color couleur12}}
cylinder{S1234 S1243 RayonArete texture{Silver_Metal} pigment {color couleur34}}
cylinder{S2134 S2143 RayonArete texture{Silver_Metal} pigment {color couleur34}}

cylinder{S2341 S2431 RayonArete texture{Silver_Metal} pigment {color couleur23}}
cylinder{S3214 S3124 RayonArete texture{Silver_Metal} pigment {color couleur23}}
cylinder{S3241 S3421 RayonArete texture{Silver_Metal} pigment {color couleur23}}
cylinder{S3214 S2314 RayonArete texture{Silver_Metal} pigment {color couleur12}}
cylinder{S3241 S2341 RayonArete texture{Silver_Metal} pigment {color couleur12}}
cylinder{S3214 S3241 RayonArete texture{Silver_Metal} pigment {color couleur34}}
cylinder{S2341 S2314 RayonArete texture{Silver_Metal} pigment {color couleur34}}

cylinder{S4213 S4123 RayonArete texture{Silver_Metal} pigment {color couleur23}}
cylinder{S4231 S4321 RayonArete texture{Silver_Metal} pigment {color couleur23}}
cylinder{S2431 S4231 RayonArete texture{Silver_Metal} pigment {color couleur12}}
cylinder{S2413 S4213 RayonArete texture{Silver_Metal} pigment {color couleur12}}
cylinder{S4213 S4231 RayonArete texture{Silver_Metal} pigment {color couleur34}}
cylinder{S2413 S2431 RayonArete texture{Silver_Metal} pigment {color couleur34}}

cylinder{S1342 S1432 RayonArete texture{Silver_Metal} pigment {color couleur23}}
cylinder{S4132 S4312 RayonArete texture{Silver_Metal} pigment {color couleur23}}
cylinder{S4132 S1432 RayonArete texture{Silver_Metal} pigment {color couleur12}}
cylinder{S1423 S4123 RayonArete texture{Silver_Metal} pigment {color couleur12}}
cylinder{S1423 S1432 RayonArete texture{Silver_Metal} pigment {color couleur34}}
cylinder{S4123 S4132 RayonArete texture{Silver_Metal} pigment {color couleur34}}

cylinder{S3142 S3412 RayonArete texture{Silver_Metal} pigment {color couleur23}}
cylinder{S1342 S3142 RayonArete texture{Silver_Metal} pigment {color couleur12}}
cylinder{S3124 S1324 RayonArete texture{Silver_Metal} pigment {color couleur12}}
cylinder{S3142 S3124 RayonArete texture{Silver_Metal} pigment {color couleur34}}
cylinder{S1342 S1324 RayonArete texture{Silver_Metal} pigment {color couleur34}}

cylinder{S4321 S3421 RayonArete texture{Silver_Metal} pigment {color couleur12}}
cylinder{S4312 S3412 RayonArete texture{Silver_Metal} pigment {color couleur12}}
cylinder{S4312 S4321 RayonArete texture{Silver_Metal} pigment {color couleur34}}
cylinder{S3412 S3421 RayonArete texture{Silver_Metal} pigment {color couleur34}}

//Placement des étiquettes
#declare mult=1.2;
#declare RayonEtiquette=RayonArete/2;
#declare GSym=array[24]{S1234, S1243, S1324, S1342, S1423, S1432, S2134, S2143, S2314, S2341, S2413, S2431, S3124, S3142, S3214, S3241, S3412, S3421, S4123, S4132, S4213, S4231, S4312, S4321};
#declare GTexte=array[24]{"1234", "1243", "1324", "1342", "1423", "1432", "2134", "2143", "2314", "2341", "2413", "2431", "3124", "3142", "3214", "3241", "3412", "3421", "4123", "4132", "4213", "4231", "4312", "4321"};
#declare ind=0;
#while (ind<24)
    cylinder{GSym[ind] mult*GSym[ind] RayonEtiquette texture{Silver_Metal} pigment {color Yellow}}
    text{ttf "timrom.ttf" GTexte[ind] RayonArete, RayonArete scale 0.1 rotate -y*clock*9/10 translate mult*GSym[ind] texture{Silver_Metal} pigment {color Yellow}}
    #declare ind=ind+1;
#end

rotate y*clock*9/10
} //fin union

// *********
// Lumière *
// *********

light_source { <2, 0, 2> color White shadowless}
light_source { <-2, 0, 2> color White shadowless}
light_source { <0, 0, 2> color White shadowless}
light_source { <0, 0, -2> color White shadowless}
light_source { <2, 2, 0> color White shadowless}
light_source { <0, 2, 2> color White shadowless}
light_source { <-2, 2, 0> color White shadowless}
light_source { <0, 2, -2> color White shadowless}



