Revenir à la page principale
Nous allons ici énumérer les formes de base implémentées dans ce projet. Pour chacune d'entre elle, un exemple de définition XML est donné.
Le plan est la "forme" la plus simple, ce n'est même pas un solide. Il est définit par un point et son vecteur normal. Dans ce projet l'approche choisie est qu'un seul côté (face) d'un plan est détectée comme la surface de l'objet. Il faut donc bien choisir son orientation.
Description XML :
<Plan> <Coord> 1. 5. 12. </Coord> <Vecteur> 0. 1. 1. </Vecteur> </Plan>
Exemple :
La sphère est définie par son centre et son rayon.
Description XML :
<Sphere> <Coord> 12. 4. 3.5 </Coord> <Rayon> 4.2 </Rayon> </Sphere>
Exemple :
Un ellipsoïde est définit par son centre de gravité, trois axes principaux et trois rayons. Les trois axes principaux étant orthogonaux, uniquement deux sont donnés, le troisième étant obtenu comme leur produit vectoriel. Il faut cependant faire attention que les deux vecteurs donnés ne soit pas colinéaires.
Description XML :
<Ellipsoide> <Coord> 1. 3. 2. </Coord> <Vecteur> 1. 0. 1. </Vecteur> <Vecteur> 0. 1. 0. <Vecteur> <Rayon> 1. </Rayon> <Rayon> 4. </Rayon> <Rayon> 2.5 </Rayon> </Ellipsoide>
Exemple :
Le tore est définit par un centre, un axe de symétrie et deux rayons.
Description XML :
<Tore> <Coord> 0. 0. 0. </Coord> <Vecteur> 0. 0. 1. </Vecteur> <Grand> 3. </Grand> <Petit> 1. </Petit> </Tore>
Exemple :
Le cube troué est décrit par une équation du 4ème degré. Il est définit par un "sommet", deux axes (le troisième est calculé à partir des deux axes donnés) et un rapport d'homothétie.
Description XML :
<CubeTroue> <Coord> 1. 3. 2. </Coord> <Vecteur> 1. 0. 1. </Vecteur> <Vecteur> 0. 1. 0. <Vecteur> <Cote> 3.14 </Cote> </CubeTroue>
Exemple :
Il est possible de composer n'importe quelle paire de formes précitées, et cette opération est récursive (càd le résultat est lui-même une forme pouvant être combinés à n'importe quelle forme). Une combinaison de forme est définie par
Ce dernier peut être :
L'opérateur union permet d'obtenir une forme étant l'ensemble des deux formes données, ce qui se traduit par "un point fait partie de l'union de a et b si et seulement si il est à la surface de a ou de celle de b".
L'opérateur intersection permet d'obtenir une forme représentant la partie commune des deux formes, se traduisant par "un point fait partie de l'intersection de a et b si et seulement si il se trouve 1) dans a et à la surface de b ou 2) dans b et à la surface de a".
L'opérateur différence permet d'enlever à un volume un autre volume, ce qui s'exprime par "un point est sur la différence de a et b si et seulement si il se trouve 1) à la surface de a mais pas dans b ou 2) à la surface de b et dans a".
Ces trois opérateurs permettent de définir n'importe quelle forme, dont certaines sont directement implémentées dans le projet.
La pyramide implémentée est un solide à base carrée avec un sommet. Il est implémenté comme l'intersection de cinq plans, et est définit par trois sommets de sa base (le quatrième étant obtenu par symétrie) et son sommet.
Description XML :
<Pyramide> <Coord> -1.0 2.0 1.0 </Coord> <Coord> -2.0 1.0 1.0 </Coord> <Coord> -2.0 3.0 1.0 </Coord> <Coord> -2.0 2.0 2.0 </Coord> </Pyramide>
Exemple :
Un parallélépipède est un solide dont les 6 faces sont des parallélogrammes . Il est donc naturellement implémenté comme l'intersection de 6 plans. Il est définit par un sommet et trois vecteurs, représentant les 3 arêtes concourant en le sommet donné.
Description XML :
<Parallelepipede> <Coord> 2.5 1.0 0.5 </Coord> <Vecteur> 1.0 0.0 -0.2 </Vecteur> <Vecteur> 0.0 1.0 -0.2 </Vecteur> <Vecteur> -0.1 -0.1 -2.0 </Vecteur> </Parallelepipede>
Exemple :
Un cube est un parallélépipède formé de carrés, tous ses angles sont droit et ses arêtes sont égales. On ne donne alors que deux arêtes au lieu de trois, qui doivent être de longueurs égales.
Description XML :
<Parallelepipede> <Coord> 2.5 1.0 0.5 </Coord> <Vecteur> 1. 0. 0. </Vecteur> <Vecteur> 0. 1. 0. </Vecteur> </Parallelepipede>
Exemple :
Le tétraèdre est un polyèdre régulier dont les quatre faces sont des triangles isocèles, il est bien connu des rôlistes sous le nom de d4. L'implémentation choisie ici diffère un peu, dans le sens qu'il s'agit plutôt d'une pyramide à base triangulaire. Il est définit par ses quatre sommets.
Description XML :
<Tetraedre> <Coord> 1.0 -2.0 2.0 </Coord> <Coord> -1.0 -4.0 2.0 </Coord> <Coord> 1.0 -4.0 0.0 </Coord> <Coord> -1.0 -2.0 0.0 </Coord> </Tetraedre>
Exemple :
L'octaèdre est un polyèdre régulier à huit faces, c'est le d8 des amateurs de jeux de rôle. A nouveau ici l'implémentation ne respecte pas (volontairement) le caractère régulier, mais le définit par trois point "sur sa base" et son sommet, le quatrième point de la base et le sommet opposé étant calculé par symétrie.
Description XML :
<Octaedre> <Coord> -1.0 2.0 1.0 </Coord> <Coord> -2.0 1.0 1.0 </Coord> <Coord> -2.0 3.0 1.0 </Coord> <Coord> -2.0 2.0 2.0 </Coord> </Octaedre>
Exemple :
Le dodécaèdre est un polyèdre régulier à douze faces, il est appelé d12 par les joueurs de Donjons & Dragons. Il est implémenté comme l'intersection de douze plans (un par face), et est décrit par un centre, un axe et un rapport d'homothétie (il s'agit toujours de la version régulière).
Description XML :
<Dodecaedre> <Coord> 0. 0. 0. </Coord> <Vecteur> 1. 0. 0. </Vecteur> <Vecteur> 0. 1. 0. </Vecteur> <Cote> 5. </Cote> </Dodecaedre>
Exemple :
L'icosaèdre (ou d20 pour les connaisseurs) est un polyèdre régulier (le dernier, dans le sens qu'il n'est pas possible de construire un solide pythagoricien avec plus de faces) à vingt faces. Il est donc naturellement implémenté comme l'intersection de vingt plans, et à nouveau est décrit par un centre, un axe et un rapport d'homothétie (il s'agit toujours de la version régulière).
Description XML :
<Icosaedre> <Coord> 0. 0. 0. </Coord> <Vecteur> 1. 0. 0. </Vecteur> <Vecteur> 0. 1. 0. </Vecteur> <Cote> 4. </Cote> </Icosaedre>
Exemple :
Il existe des formes dont l'équation ne délimite pas un volume fermé. Ces volumes sont utilisé conjointement à FormeComposee, qui permet alors d'obtenir finalement un volume bien déterminé. Les formes présentées ci-dessous sont la version "finie", mais une version "infinie" existe pour chacune d'entre elles.
Le cylindre est définit par un axe, un rayon, une hauteur et un point (qui correspond à l'intersection entre son axe de symétrie et une base).
Description XML :
<Cylindre> <Coord> -2.0 -1.0 0.0 </Coord> <Vecteur> 0.0 1.0 1.0 </Vecteur> <Rayon> 1.0 </Rayon> <Hauteur> 10. </Hauteur> </Cylindre>
Exemple :
Le cône est définit par son sommet, un axe, une hauteur et un angle d'ouverture. Pour simplifier l'implémentation, l'angle d'ouverture est donné par sa tangente.
Description XML :
<Cone> <Coord> 6. 0. 4. </Coord> <Vecteur> 0. 0. -1. </Vecteur> <Angle> .3 </Angle> <Hauteur> 5. </Hauteur> </Cone>
Exemple :
Le paraboloïde est une variété définie par . Si a == b, alors il s'agit d'un paraboloïde de révolution. La version présentée est définie par son sommet, ses trois axes, deux facteurs d'échelle (a et b) ainsi qu'une hauteur, qui est la distance entre le sommet du paraboloïde et un plan qui "ferme" le volume.
Description XML :
<Paraboloide> <Coord> 0. 0. 0. </Coord> <Vecteur> 1. 0. 0. </Vecteur> <Vecteur> 0. -1. 0. </Vecteur> <Vecteur> 0. 0. -1. </Vecteur> <FacteurEchelle> 3. </FacteurEchelle> <FacteurEchelle> 2. </FacteurEchelle> <Hauteur> 3. </Hauteur> </Paraboloide>
Exemple :
Un hyperboloïde est une variété définie par . Il existe aussi une version dite à deux nappes, mais qui n'est pas implémentée ici. A nouveau si a == b on a à faire à un hyperboloïde de révolution. La version présentée ici est définie par son "sommet", ses trois axes, trois facteurs d'échelle (a, b etc) ainsi que deux hauteurs, qui définissent la distance entre le sommet du paraboloïde et les deux plans qui "ferment" le volume.
Description XML :
<Hyperboloide> <Coord> 0. 0. 0. </Coord> <Vecteur> 1. 0. 0. </Vecteur> <Vecteur> 0. 1. 0. </Vecteur> <Vecteur> 0. 0. 1. </Vecteur> <FacteurEchelle> 3. </FacteurEchelle> <FacteurEchelle> 2. </FacteurEchelle> <FacteurEchelle> 4. </FacteurEchelle> <Hauteur> 2. </Hauteur> <Hauteur> 3. </Hauteur> </Hyperboloide>
Exemple :