Menu

ListFormes

Johan Luisier

Revenir à la page principale

Les formes de base

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

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

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 :

L'ellispoïde

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

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é"

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 :

Les formes composées

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

  1. les deux formes à combiner
  2. un opérateur de combinaison

Ce dernier peut être :

  • union
  • intersection
  • différence

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

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 :

Le parallélépipède

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 :

Le cube

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

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

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

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

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 :

Les formes "infinies"

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

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

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

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 :

L'hyperboloïde

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 :


Related

Wiki: Home

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.