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