\subsection{Le module \emph{luadraw\_polyhedrons}} Ce module est encore à l'état d'ébauche et est appelé à s'étoffer par la suite. Comme son nom l'indique, il contient la définition de polyèdres. Toutes les données numériques sont issues du site \href{https://dmccooey.com/polyhedra/}{Visual Polyhedra}. \textbf{Utilisation : ce module n'ajoute pas de nouvelles méthodes graphiques, mais il renvoie une table de fonctions construisant des polyèdres.} Par conséquent, il s'utilise ainsi (exemple): \begin{Luacode} local poly = require 'luadraw_polyhedrons' local M = pt3d.M local T = poly.tetrahedron( M(0,0,0), M(1,1,1) ) \end{Luacode} Toutes les fonctions sont sur le même modèle : \cmd{(C, S \fac{, all})} où \argu{C} est le centre du polyèdre (point 3D) et \argu{S} un sommet du polyèdre (point 3D), lorsque \argu{C} ou \argu{S} ont la valeur \nil, c'est le polyèdre non transformé (de centre l'origine) qui est renvoyé. L'argument facultatif \argu{all} est un booléen, lorsqu'il a la valeur \true la fonction renvoie une séquence de quatre choses : \emph{P, V, E, F} où : \begin{itemize} \item $P$ est le solide en tant que polyèdre, \item $V$ la liste (table) des sommets, \item $E$ la liste (table) des arêtes (avec points 3D), \item $F$ la liste des facettes (avec points 3D). Certains polyèdres ont plusieurs types de facettes, dans ce cas la résultat renvoyé est de la forme : \emph{P, V, E, F1, F2, \ldots}, où $F1$, $F2$, \ldots, sont des listes de facettes. Cela peut permettre de les dessiner avec des couleurs différentes par exemple. \end{itemize} Lorsque l'argument \argu{all} a la valeur \false, qui est la valeur par défaut, la fonction ne renvoie que le polyèdre. Voici les solides actuellement contenus dans ce module : \begin{itemize} \item Les solides de Platon, ces solides n'ont qu'un type des faces : \begin{itemize} \item la fonction \cmd{tetrahedron(C, S \fac{, all})} permet la construction d'un tétraèdre régulier de centre \argu{C} (point 3D) et dont un sommet est \argu{S} (point 3D). \item La fonction \cmd{octahedron(C, S \fac{, all})} permet la construction d'un octaèdre de centre \argu{C} (point 3D) et dont un sommet est \argu{S} (point 3D). \item La fonction \cmd{cube(C, S \fac{, all})} permet la construction d'un cube de centre \argu{C} (point 3D) et dont un sommet est \argu{S} (point 3D). \item La fonction \cmd{icosahedron(C, S \fac{, all})} permet la construction d'un icosaèdre de centre \argu{C} (point 3D) et dont un sommet est \argu{S} (point 3D). \item La fonction \cmd{dodecahedron(C, S \fac{, all})} permet la construction d'un dodécaèdre de centre \argu{C} (point 3D) et dont un sommet est \argu{S} (point 3D). \end{itemize} \item Les solides d'Archimède : \begin{itemize} \item La fonction \cmd{cuboctahedron(C, S \fac{, all})} permet la construction d'un cuboctaèdre de centre \argu{C} (point 3D) et dont un sommet est \argu{S} (point 3D). Ce solide a deux types de faces. \item La fonction \cmd{icosidodecahedron(C, S \fac{, all})} permet la construction d'un icosidodécaèdre de centre \argu{C} (point 3D) et dont un sommet est \argu{S} (point 3D). Ce solide a deux types de faces. \item La fonction \cmd{lsnubcube(C, S \fac{, all})} permet la construction d'un cube adouci (forme 1) de centre \argu{C} (point 3D) et dont un sommet est \argu{S} (point 3D). Ce solide a deux types de faces. \item La fonction \cmd{lsnubdodecahedron(C, S \fac{, all})} permet la construction d'un dodécaèdre adouci (forme 1) de centre \argu{C} (point 3D) et dont un sommet est \argu{S} (point 3D). Ce solide a deux types de faces. \item La fonction \cmd{rhombicosidodecahedron(C, S \fac{, all})} permet la construction d'un rhombicosidodécaèdre de centre \argu{C} (point 3D) et dont un sommet est \argu{S} (point 3D). Ce solide a trois types de faces. \item La fonction \cmd{rhombicuboctahedron(C, S \fac{, all})} permet la construction d'un rhombicuboctaèdre de centre \argu{C} (point 3D) et dont un sommet est \argu{S} (point 3D). Ce solide a deux types de faces. \item La fonction \cmd{rsnubcube(C, S \fac{, all})} permet la construction d'un cube adouci (forme 2) de centre \argu{C} (point 3D) et dont un sommet est \argu{S} (point 3D). Ce solide a deux types de faces. \item La fonction \cmd{rsnubdodecahedron(C, S \fac{, all})} permet la construction d'un dodécaèdre adouci (forme 2) de centre \argu{C} (point 3D) et dont un sommet est \argu{S} (point 3D). Ce solide a deux types de faces. \item La fonction \cmd{truncatedcube(C, S \fac{, all})} permet la construction d'un cube tronqué de centre \argu{C} (point 3D) et dont un sommet est \argu{S} (point 3D). Ce solide a deux types de faces. \item La fonction \cmd{truncatedcuboctahedron(C, S \fac{, all})} permet la construction d'un cuboctaèdre tronqué de centre \argu{C} (point 3D) et dont un sommet est \argu{S} (point 3D). Ce solide a trois types de faces. \item La fonction \cmd{truncateddodecahedron(C, S \fac{, all})} permet la construction d'un dodécaèdre tronqué de centre \argu{C} (point 3D) et dont un sommet est \argu{S} (point 3D). Ce solide a deux types de faces. \item La fonction \cmd{truncatedicosahedron(C, S \fac{, all})} permet la construction d'un icosaèdre tronqué de centre \argu{C} (point 3D) et dont un sommet est \argu{S} (point 3D). Ce solide a deux types de faces. \item La fonction \cmd{truncatedicosidodecahedron(C, S \fac{, all})} permet la construction d'un icosidodécaèdre tronqué de centre \argu{C} (point 3D) et dont un sommet est \argu{S} (point 3D). Ce solide a deux trois de faces. \item La fonction \cmd{truncatedoctahedron(C, S \fac{, all})} permet la construction d'un octaèdre tronqué de centre \argu{C} (point 3D) et dont un sommet est \argu{S} (point 3D). Ce solide a deux types de faces. \item La fonction \cmd{truncatedtetrahedron(C, S \fac{, all})} permet la construction d'un tétraèdre tronqué de centre \argu{C} (point 3D) et dont un sommet est \argu{S} (point 3D). Ce solide a deux types de faces. \end{itemize} \item Autres solides : \begin{itemize} \item La fonction \cmd{octahemioctahedron(C, S \fac{, all})} permet la construction d'un octahémioctaèdre de centre \argu{C} (point 3D) et dont un sommet est \argu{S} (point 3D). Ce solide a deux types de faces. \item La fonction \cmd{small\_stellated\_dodecahedron(C, S \fac{, all})} permet la construction d'un petit dodécaèdre étoilé de centre \argu{C} (point 3D) et dont un sommet est \argu{S} (point 3D). Ce solide a un seul type de faces. \end{itemize} \end{itemize} \begin{demo}{Polyèdres du module \emph{luadraw\_polyhedrons}} \begin{luadraw}{name=polyhedrons} local ld = luadraw local M, Origin = ld.pt3d.M, ld.pt3d.Origin local i = ld.cpx.I local poly = require 'luadraw_polyhedrons' -- chargement du module local g = ld.graph3d:new{bg="LightGray", size={10,10}} g:Labelsize("small"); ld.Hiddenlines = false -- en haut à gauche g:Saveattr(); g:Viewport(-5,0,0,5); g:Coordsystem(-5,5,-5,5,true) local T,S,A,F = poly.icosahedron(Origin,M(0,2,4.5),true) g:Dscene3d( g:addFacet(F, {color="Crimson",opacity=0.8}), g:addPolyline(A, {color="Pink", width=8}), g:addDots(S) ) g:Dlabel("Icosaèdre",5*i,{}) g:Restoreattr() -- en haut à droite g:Saveattr() g:Viewport(0,5,0,5); g:Coordsystem(-5,5,-5,5,true) local T,S,A,F1,F2 = poly.truncatedtetrahedron(Origin,M(0,0,5),true) -- sortie complète, affichage dans une scène 3D g:Dscene3d( g:addFacet(F1, {color="Crimson",opacity=0.8}), g:addFacet(F2, {color="Gold"}), g:addPolyline(A, {color="Pink", width=8}), g:addDots(S) ) g:Dlabel("Tétraèdre tronqué",5*i,{}) g:Restoreattr() -- en bas à gauche g:Saveattr(); g:Viewport(-5,0,-5,0); g:Coordsystem(-5,5,-5,5,true) local T,S,A,F1,F2,F3 = poly.rhombicosidodecahedron(Origin,M(0,0,4.5),true) g:Dscene3d( g:addFacet(F1, {color="Crimson",opacity=0.8}), g:addFacet(F2, {color="Gold",opacity=0.8}), g:addFacet(F3, {color="ForestGreen"}), g:addPolyline(A, {color="Pink", width=8}), g:addDots(S) ) g:Dlabel("Rhombicosidodécaèdre",-5*i,{}) g:Restoreattr() -- en bas à droite g:Saveattr(); g:Viewport(0,5,-5,0); g:Coordsystem(-5,5,-5,5,true) local T,S,A,F1 = poly.small_stellated_dodecahedron(Origin,M(0,0,5),true) g:Dscene3d( g:addFacet(F1, {color="Crimson",opacity=0.8}), g:addPolyline(A, {color="Pink", width=8}), g:addDots(S) ) g:Dlabel("Petit dodécaèdre étoilé",-5*i,{}) g:Restoreattr() g:Show() \end{luadraw} \end{demo}