Pour obtenir la solution graphique, il suffit d'incorporer correctement la procédure de dessin ci-dessus à la solution numérique. Une maîtrise suffisamment bonne du logiciel nous permet d'obtenir alors la commande suivante, qui tient compte de la manière dont Mathematica affiche les résultats.
soletdessin[points_List]:= Module[{c,s,solu,solutions1,u,w,po,objpoints,res}, Clear[a,b,r]; po = points; dist[v_List,w_List]:=N[Sqrt[(w-v).(w-v)]]; c = {a,b}; eq[k_,j_]:= r + (-1)^k s == dist[c,po[[j]]]; cas[u1_,u2_,u3_,u4_]:= {eq[u1,1],eq[u2,2],eq[u3,3],eq[u4,4]}; sol[u1_,u2_,u3_,u4_]:= Reduce[cas[u1,u2,u3,u4],{a,b,r},{s}]; solu={sol[1,2,2,2],sol[2,1,2,2],sol[2,2,1,2], sol[2,2,2,1], sol[1,1,2,2], sol[1,2,1,2],sol[1,2,2,1]}; solutions1 = Map[If[#===False,False,Sort[#]]&,solu]; solutions = solutions1 /. And->List; u= Map[{Take[#,{1,2}],Last[#]}&,solutions]; w=Table[{{u[[k,1,1,2]],u[[k,1,2,2]]},u[[k,2,2]]},{k,Length[u]}]; objpoints = Graphics[{PointSize[.03], Map[Point,Table[po[[k]],{k,Length[po]}]]}]; res = Show[objpoints,Graphics[Table[Circle[w[[k,1]],w[[k,2]]], {k,Length[w]}]], AspectRatio->Automatic, PlotRange->All, Axes->True] ]La procédure ci-dessus est suffisamment robuste pour résister aux assauts de qui voudrait la prendre en défaut en choisissant les 4 points de manière ``pathologique''. On pourrait par exemple essayer 4 points alignés, comme
soletdessin[{{0,0},{1,0},{3,0},{6,0}}]
,
soletdessin[{{0,0},{1,0},{3,0},{4,0}}]
,
ou encore faire coincider certains points, comme
soletdessin[{{0,0},{1,0},{2,0},{2,0}}]
,
soletdessin[{{0,0},{1,0},{1,0},{1,0}}]
,
soletdessin[{{0,0},{0,0},{0,0},{0,0}}]
,
ou enfin 4 points sur un même cercle, comme
soletdessin[{{0,0},{1,0},{1,1},{0,1}}]
.
Dans les cas du genre ``pathologique'', Mathematica va afficher une série plus ou moins longue de messages d'avertissement avant de produire une figure. Mais dans tous les cas, l'utilisateur pourra, en exécutant la commande
solutions
obtenir la solution numérique et comprendre pourquoi le dessin ne correspond pas à son attente.
Notons qu'il y a une manière élégante de s'assurer que, par exemple, les points choisis soient en position générique, c'est-à-dire non situés sur une droite ou un même cercle. Nous ne l'avons pas incorporée aux commandes ce4pn et ce4ps, mais elle pourrait faire l'objet d'un autre article.
La figure qui suit contient la solution graphique de l'exemple proposé au début de l'article et, comme exercice, celle d'un exemple simple de 4 points
en position générique:
.
Comme indiqué plus haut, nous proposons pour terminer une expérience de résolution graphique de 9 problèmes que le lecteur pourra reproduire, et qui va nous donner l'occasion de montrer comment rassembler une collection de plusieurs figures en une seule gallerie.
Il suffit pour cela d'exécuter successivement les commandes suivantes:
SeedRandom[``L'an 2000''] points := Table[{Random[],Random[]},{4}] collection = Table[d[k] = soletdessin[points],{k,1,9}] gallerie = Show[GraphicsArray[{{d[1],d[2],d[3]},{d[4],d[5],d[6]}, {d[7],d[8],d[9]}}]]Mieux que mille mots, la figure suivante illustre le résultat.