Lors de l’utilisation de ''donymodule.mp'', Fabrice Eudes a souhaité savoir (à juste titre puisque la documentation est incomplète :-/), comment utiliser la gestion des faces cachées en géométrie spatiale.
//Attention//, cela ne fonctionne qu’avec des solides convexes (mais on peut mettre plusieurs solides dans la même figure). Je ne détaillerai pas ici les justifications mathématiques, juste l’utilisation à en faire dans ''donymodule.mp''.
Elle se fait en trois étapes :
==== Définir les sommets ====
* On utilise le paramètre ''NbS'' pour indiquer le nombre de sommets. Comme certains solides classiques sont déjà prédéfinis, on veillera à coder NbS:=8
* //Ensuite//, on définit les sommets du solide :
Sommet1:=(0,0,0);
...
Sommet8:=(5,3,4);
==== Définir les faces ====
* On utilise le paramètre ''NF'' pour indiquer le nombre de faces. La remarque sur le paramètre ''NbS'' est aussi valable.
* //Ensuite//, on définit les faces du solide :
Fc[100]:=3;Fc[101]:=1;Fc[102]:=2;Fc[103]:=5;
...
Fc[800]:=4;Fc[801]:=5;Fc[802]:=6;Fc[803]:=7;Fc[804]:=8;
avec les conventions suivantes :
* S'il s'agit de la k-ième face, alors ''Fc[k*100]'' indique le nombre de sommets composant la face;
* ''Fc[k*100+1]'',...,''Fc[k*100+...]'' indique le numéro des sommets (comme défini par ''Sommet[n]'') dans le sens trigonométrique de lecture de la face concernée. (J'avoue ;-) que j'ai parfois du mal avec cette partie)
==== Le dessin, le dessin,...le dessin !====
Il ne reste plus qu'à indiquer que l'on souhaite le tracé de ce solide par la commande
DessineObjet
C'est dur :-X
==== Un exemple complet ====
C'est le code source d'une figure utilisée dans les [[http://melusine.eu.org/lab/cp/|Bases]] de syracuse.
input geometriesyr16;
figureespace(-10u,-10u,10u,10u);
Initialisation(5,30,20,750);
color S,A,B,C;
S=3/4*(0,0,1);
A=3/4*(0,0,0);
B=3/4*(0,4/3,0);
C=3/4*(4/3,4/3,0);
NbS:=4;
Sommet1:=A;
Sommet2:=B;
Sommet3:=C;
Sommet4:=S;
NF:=4;
Fc[100]:=3;Fc[101]:=2;Fc[102]=3;Fc[103]:=1;
Fc[200]:=3;Fc[201]:=2;Fc[202]=1;Fc[203]:=4;
Fc[300]:=3;Fc[301]:=4;Fc[302]=1;Fc[303]:=3;
Fc[400]:=3;Fc[401]:=4;Fc[402]=3;Fc[403]:=2;
DessineObjet;
trace codeperp(A,B,C,10);
trace codeperp(S,A,B,15);
trace codeperp(S,A,C,10);
trace appelation(A,B,2mm,btex 8 etex);
trace appelation(A,S,2mm,btex 6 etex);
trace appelation(C,B,-2mm,btex 5 etex);
nomme.llft(A);
nomme.top(S);
nomme.rt(B);
nomme.lrt(C);
finespace;
end
et voici les résultats
avec ''Initialisation(5,30,20,750);'' on obtient
----
{{cp:wikisolides-1.png|}}
----
et avec ''Initialisation(5,70,20,750);'' on obtient
----
{{cp:wikisolides-2.png|}}
----
Suivant la position de l'observateur, les arêtes sont en traits pleins ou en pointillés.
C'est ce que l'on voulait. ;-)