Je cherche à faire de "beaux" dessins de trigonométrie sphérique. Je cherche dans un premier temps à tracer des grands cercles sur une sphère.
Pour ce faire j'utilise Solids et skeleton et les fonctions:
- "transverse", qui me dessine l'équateur
- "longitudinal" qui me dessine un méridien
- puis des rotations de ces 2 grands cercles de base
La rotation d'axe Y ( axe Y : Est-Oeust) de l'équateur est (me semble-t-il) correctement représentée.
Lorsque je pratique une rotation d'axe Z (axe Z : pôle sud- pôle Nord) du méridien , solids trace en trait interrompu, tout ce qui est sous l'équateur, sans tenir compte que dans la projection choisie, ceci est faux dans ce cas.
Des idées ? Des suggestions.
Merci
Salutations
JMJ
Le code est :
Code : Tout sélectionner
\begin{figure}
\centering
\begin{asy}
import solids;
import graph3;
unitsize(1cm);
size(10cm);
real Angle_Y = 23;
real Angle_Z1 = -45;
real Rayon = 1; // Rayon de la sphère
settings.render=4; // Pose pb si =0 : Le plan devant la sphere est absent
settings.prc=false;
currentprojection=orthographic(3,10,5);
currentlight=White;
// Transfomations diverses
transform3 RotationDAxe_Y = rotate(Angle_Y, Y);
transform3 Rotation1DAxe_Z = rotate(Angle_Z1, Z);
// Axes du repère 3D.
axes3("$x$", "$y$", "$z$",min=(0,-2,0),max=(2,2,2),Arrow3);
// définition de la sphère
revolution Rev_Sph = sphere((0,0,0),Rayon);
// ATTENTION: draw(Rev_Sph.silhouette()); ne trace rien =>
// donc:
draw(surface(Rev_Sph), surfacepen=blue+opacity(.2), meshpen=0.6*grey);
skeleton s_Sphere;
// transverse => Perpendiculaire à l'axe de révolution: On trace donc un parallèle et 0.5 place la génératrice nommée "g" au milieu => On trace l' équateur
Rev_Sph.transverse(s_Sphere,reltime(Rev_Sph.g,0.5),P=currentprojection);
draw(s_Sphere.transverse.front);
draw(s_Sphere.transverse.back,linetype("8 8",8));
// Rotation de l'équateur
Rev_Sph.transverse(s_Sphere,reltime(Rev_Sph.g,0.5),P=currentprojection);
draw(RotationDAxe_Y * s_Sphere.transverse.front,red);
draw(RotationDAxe_Y * s_Sphere.transverse.back,linetype("8 8",8)+red);
// longitudilal et 0.5 méridienne ATTENTION la syntaxe est différente de transverse. Le code ci-dessous ne marche pas
// Rev_Sph.longitudinal(s_Sphere,reltime(Rev_Sph.g,0.5),P=currentprojection);
//draw(s_Sphere.transverse.back,linetype("8 8",8));
// draw(s_Sphere.transverse.front);
// Ce code trace le grand cercle passant par (1,0,0), (0,0,1) et (0,0,-1)
// C.-à-d. Point sur l'équateur au méridien 0,Pole Nord, Pole Sud
Rev_Sph.longitudinal(s_Sphere,P=currentprojection);
draw(s_Sphere.longitudinal.front);
draw(s_Sphere.longitudinal.back,linetype("8 8",8));
// Rotation du méridien
Rev_Sph.longitudinal(s_Sphere,P=currentprojection);
draw(Rotation1DAxe_Z * s_Sphere.longitudinal.front,blue);
draw(Rotation1DAxe_Z * s_Sphere.longitudinal.back,linetype("8 8",8)+blue);
\end{asy}
\caption{Surface Sphere avec grands cercles \label{Unit Sphere avec grands cercle} }
\end{figure}