Comment dessiner deux courbes entre Montréal et Sydney

Voici la liste des commandes à entrer dans Mathematica pour dessiner sur la sphère l'arc de grand cercle qui va mesurer la distance entre Montréal et Sydney ainsi que l'image, par la fonction vectorielle x, du segment reliant M et S dans l'espace des paramètres u et v, avec x(M) = Montreal et x(S) = Sydney.
Par commodité, on travaille avec la sphère de rayon 1.


On choisit une représentation paramétrique de la sphère de rayon 1, centrée à l'origine:
x[u_,v_]:= {Cos[u] Sin[v],Sin[u] Sin[v], Cos[v]}
On vérifie que la norme du vecteur x[u,v] est bien égale à 1:
x[u,v] . x[u,v]
Simplify[%]
Cette commande montre comment on trouve une option par défaut parmi les différentes options de la commande ParametricPlot3D:
Options[ParametricPlot3D,ViewPoint]
La commande suivante montre comment dessiner une portion de la sphère, utile pour notre problème. On a ajouté "//Evaluate" pour éviter un message d'avertissement de Mathematica lors de la construction de la carte.
sphp[p1_,p2_]:= ParametricPlot3D[x[u,v]//Evaluate,{u,-Pi/18,p1},{v,0,p2}]
carte = sphp[150 Pi/180,121 Pi/180]
Dans les lignes suivantes, on prépare le dessin des points sur la sphère qui vont représenter Montréal et Sydney. Un premier essai nous pousse à "descendre" un peu Sydney pour que le point correspondant apparaisse sur la figure.
L'ajout de commentaires dans Mathematica améliore la relecture du calcul dans le futur et renseigne sur le déroulement des opérations.
(* Coordonnées de Montréal et Sydney en radians *)
liste1 = {u1=0,v1=90-45.5,u2 =73.5+151,v2=90+34 }(*en degres*)
(*A cause du 224.5, à remplacer par la liste2 *)
liste2 = Pi/180 {u1=0,v1=90-45.5,u2 =360-(73.5+151),v2=90+35 }//N (* en radians *)
{u1,v1,u2,v2}=liste2
Il faut prendre l'habitude de donner des noms à ses calculs pour faciliter la référence future à ces calculs:
point1 = {u1,v1} (*Montreal*)
point2 = {u2,v2} (*Sydney*)
points = {x[u1,v1],x[u2,v2]}
Une fois les points correctement calculés, il faut construire leur représentation graphique; on choisit leur apparence pour qu'ils se voient bien et étiquette les axes de coordonnées:
MetS = Show[ Graphics3D[{PointSize[.025],Point[points[[1]]],Point[points[[2]]]}, AxesLabel->{x,y,z}]]
Le résultat de la commande ci-dessus n'est pas très instructif. Le but est de l'agglomérer avec le dessin de la carte :
Show[carte,MetS,AxesLabel->{x,y,z}]
Passons au dessin des deux courbes: l'image par x du segment reliant M et S dans l'espace des paramètres, puis l'arc de grand cercle qui va réaliser la distance entre x(M) et x(S):
(*image du segment de droite de(u1,v1) à (u2,v2) *)
Paramétrisation de ce segment et image par x de cette paramétrisation.
Appelons y la composition de ces deux fonctions:
y[t_]:=x[u1 +t (u2 - u1),v1 + t (v2-v1)]
Vérification que les extrémités de l'image correspondent bien à la position de Montréal et Sydney sur la sphère:
y[0]
y[1]
points
Dessin de cette image, appelée ici courbe:
courbe = ParametricPlot3D[y[t]//Evaluate,{t,0,1}]
Rassemblons les dessins, puis changeons de point de vue (ViewPoint) :
Show[carte,MetS,courbe]
Show[carte,MetS,courbe,ViewPoint->{1.3,2.4,2}]
A partir de ce point-ci, on incorpore le nouveau point de vue dans la commande des dessins, on aura donc:
sphp2[p1_,p2_]:= ParametricPlot3D[x[u,v]//Evaluate,{u,-Pi/18,p1},{v,0,p2},ViewPoint->{1.3,2.4,2}]
carte2 = sphp2[150 Pi/180,121 Pi/180]
Show[carte2,MetS,courbe]
Les calculs qui suivent sont un exemple de paramétrisation d'une courbe donnée sous forme implicite comme l'intersection de deux surfaces. Ici, il s'agit d'un cercle comme intersection d'un plan et d'une sphère. Plus précisément, du plan P passant par l'origine et contenant x(M) et x(S) et de la sphère de rayon 1 centré à l'origine d'équation z1^2 + z2^2 + z3^2 -1 = 0.
(*Etablir une représentation paramétrique du grand cercle passant par x(M) et x(S) *)
Rappelons-nous que pour dessiner les points x(M) et x(S), nous avions pris des coordonnées géographiques approchées. Recalculons maintenant notre liste2 de manière plus précise.
liste2 = Pi/180 {u1=0,v1=90-45.52,u2 =360-(73.57+151.17),v2=90+33.88 }
{u1,v1,u2,v2}=liste2
point1 = {u1,v1} (*Montreal*)
point2 = {u2,v2} (*Sydney*)
points = {x[u1,v1],x[u2,v2]}
w = Cross[points[[1]],points[[2]]]
Un point quelconque de R^3 :
z={z1,z2,z3}
On impose à ce point d'appartenir au plan P avec l'équation w . z = 0, et on exprime, grâce à cette équation, z1 en fonction de z2 et z3, et on simplifie au besoin :
res1 = Solve[w .z ==0,z1]
res2 = Simplify[res1]
Ensuite, on impose aux points de ce plan P d'être sur la sphère, au besoin en simplifiant et en supprimant le "bruit algorithmique" qui se traduit dans le résultat par un coefficient de la forme " .0 "
On peut alors exprimer z2 en fonction de z3 car, vu le problème à résoudre, on a décidé de choisir z3 comme paramètre pour décrire l'arc de cercle cherché.
res3 = Solve[z.z-1==0 /.res2,z2]
res4 = Chop[res3]//Simplify
Deux solutions pour z2. Une seule est la bonne. Il faut faire un choix, sachant quelles sont les coordonnées cartésiennes de Montréal et Sydney.
Notons que les résultats de la commande Solve sont donnés sous la forme de règles de substitution ( avec la flèche ->) qu'il est ensuite facile d'utiliser dans un calcul, grâce à " /. " (une barre oblique suivie d'un point).
Ainsi, Solve[z.z-1==0 /.res2,z2] signifie au long:
Résouds l'équation z1^2 + z2^2 + z3^2 -1 = 0 (dans laquelle tu as substitué z1 en fonction de z2 et z3 d'après le résultat res1) par rapport à z2.
La répétition de cette façon de faire conduit au résultat res8 qui nous permet finalement d'écrire une représentation du cercle cherchée:
res5 = res4[[2]]
res6 = res2 /. res5 //Simplify
res7 ={z1,z2,z3} /. res5 /.res6
res8 = res7[[1]]
cercle[s_]:= Evaluate[res8 /. z3->s]
cercle[s]
points
Choisir les s qui vont décrire l'arc de grand cercle réalisant la distance entre Montréal et Sydney.
cercle[points[[1,3]]]
cercle[points[[2,3]]]
arcdegrandcercle = ParametricPlot3D[cercle[s]//Evaluate,{s,points[[1,3]],points[[2,3]]}]
Show[carte2,MetS,courbe,arcdegrandcercle]
Comparé à la longueur de l'arc de grand cercle, le calcul de la longueur de la courbe y montre que cette courbe ne réalise pas la distance entre x(M) et x(S) sur la sphère.
Cet exemple (relativement simple) nous pousse à approfondir notre notion de distance, ce qui sera fait par l'étude des géodésiques sur une surface.

Retour à ma page personnelle



©jmt 000913