Fenêtre de Viviani
Page 1 sur 1
Fenêtre de Viviani
Voici un exemple utilisant les commandes Build3D et Display3D, ainsi que le modèle scene3d.mod:
1) Charger le modèle scene3d.mod,
2) Créer la macro Clip3D avec la commande (celle-ci fera partie de la prochaine version):
3) Créer un élément Utilisateur avec la commande:
Explication:
-> on crée une sphère S de centre O et de rayon 4 (avec 40*40=1600 facettes),
-> on crée un cylindre C partant du point de coordonnées (2,0,-5) [centre d'une face circulaire], de hauteur 10 fois le vecteur vecK, de rayon 2 et avec 30 facettes. Ce cylindre contient donc l'axe Oz et il est tangent à la sphère au point (4,0,0),
-> on clippe la sphère avec le cylindre et on garde la partie extérieure au cylindre, on obtient un solide S',
-> la courbe paramétrée par f(t)=(2+2cos(t), 2sin(t) 4sin(t/2)) est l'intersection de la sphère S et du cylindre C, on crée à partir de cette courbe un tube (bord) de rayon 0.1 pour t allant de -2pi à 2pi avec 50 lignes pour t et 4 facettes,
-> la commande Build3D construit la scene avec le cylindre C transparent (opacité=0.3), la sphère clippée S', et le bord sans nuance de couleur ( paramètre -i) de manière à ne pas distinguer les facettes,
-> la commande Display3D affiche la scène:
1) Charger le modèle scene3d.mod,
2) Créer la macro Clip3D avec la commande (celle-ci fera partie de la prochaine version):
- Code:
{Clip3D( facettes à clipper, facettes, in/out(0/1)}
[$S:=%1,
if %3=Nil then $int:=0 else int:=%3 fi,
if int=0 then {intérieur}
$aux:=MapBy(
[$A:=$facette[1,2], $B:=facette[3,2], $C:=facette[5,2],
$Plan:=[A, -Prodvec(B-A,C-A)],
if Plan<>Nil then S:=ClipFacet(S,Plan) fi
],facette,%2,jump
),
S
else {exterieur}
MapBy(
[$A:=$facette[1,2], $B:=facette[3,2], $C:=facette[5,2],
$u:=Prodvec(B-A,C-A),
if u<>Nil then
ClipFacet(S,[A,u]),
S:=ClipFacet(S,[A,-u]) fi
],facette,%2,jump
)
fi]
3) Créer un élément Utilisateur avec la commande:
- Code:
[S:=Sphere(Origin,4,40,40),
C:=cylindre(M(2,0,-5),10*vecK,2,30),
S':=Clip3D(S,C,1),
bord:=curveTube( 2*M((1+cos(t)),sin(t),2*sin(t/2)),0.1,-2*pi,2*pi,50,4),
Build3D( [1,Rgb(0.74,0.73,1)+0.3*i,C],
[1,darkseagreen,S'],
[1-i,red, bord]),
Display3D()]
Explication:
-> on crée une sphère S de centre O et de rayon 4 (avec 40*40=1600 facettes),
-> on crée un cylindre C partant du point de coordonnées (2,0,-5) [centre d'une face circulaire], de hauteur 10 fois le vecteur vecK, de rayon 2 et avec 30 facettes. Ce cylindre contient donc l'axe Oz et il est tangent à la sphère au point (4,0,0),
-> on clippe la sphère avec le cylindre et on garde la partie extérieure au cylindre, on obtient un solide S',
-> la courbe paramétrée par f(t)=(2+2cos(t), 2sin(t) 4sin(t/2)) est l'intersection de la sphère S et du cylindre C, on crée à partir de cette courbe un tube (bord) de rayon 0.1 pour t allant de -2pi à 2pi avec 50 lignes pour t et 4 facettes,
-> la commande Build3D construit la scene avec le cylindre C transparent (opacité=0.3), la sphère clippée S', et le bord sans nuance de couleur ( paramètre -i) de manière à ne pas distinguer les facettes,
-> la commande Display3D affiche la scène:
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|