Apprendre Maple Index du Forum Apprendre Maple
Site dédié au logiciel de calcul formel Maple
 
  Page d'accueilPage d'accueil   FAQFAQ    RechercherRechercher    Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs 
S'enregistrerS'enregistrer    ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Point de Torricelli d'un triangle

 
Poster un nouveau sujet   Répondre au sujet    Apprendre Maple Index du Forum -> Maple en géométrie
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
michel
Invité





MessagePosté le: 14 Avr 2005 16:53    Sujet du message: Point de Torricelli d'un triangle Répondre en citant

Bonjour,
Soient dans le plan, un triangle ABC dont les 3 angles sont aigus, P un point à l'intérieur du triangle, on sait que le point P tel que PA+PB+PC soit minimal, s'appelle point de Torricelli.
Les distances de P à A, à B et à C se nomment respectivement x, y et z et les côtés du triangle AB=c, BC=a, CA=c. On sait que le point P est situé au point de concours des 3 cercles circonscrits aux 3 triangles équilatéraux construits sur les côtés du triangle ABC et à l'extérieur de celui-ci. A l'aide des équations de 2 de ces cercles qui se coupent, on peut trouver les coordonnées de P.
Dans le cas qui m'intéresse a²=277, b²=181 et c²=340. A partir des coordonnées de P on trouve les distances x=8.8727, y=12.3253 et z=6.6069.
On s'interesse maintenant à une autre méthode :
dans les triangles ABP,ACP et BCP on a :
eq1:=c²=x²+y²-2x.y.cos(2Pi/3)=x²+y²+x.y de même
eq2:=b²=x²+z²+x.z
eq3:=a²=y²+z²+y.z
D'autre part les 4 points A, B, C et P appartenant au plan alors le déterminant de Caley est nul, donc :
eq4:=det(matrix(5,5,[
0,1,1,1,1,
1,0,x²,y²,z²,
1,x²,0,c²,b²,
1,y²,c²,0,a²,
1,z²,b²,a²,0]))=0:
Si on essaie sol:=solve({eq1,eq2,eq3],{x,y,z}); : ceci ne donne rien.
Si on essaie sol:=solve({eq1,eq2,eq3,eq4],{x,y,z}) ; : ceci ne donne rien non plus.
Mais si on essaie sol:=solve({eq1,eq2,eq4],{x,y,z}); suivi de map(evalf,allvalues(%)); alors on obtient 200 solutions différentes environ parmi lesquelles "la bonne" x=8.8727, y=12.3253 et z=6.6069. La question que je me pose est : Pourrait-s'y prendre mieux ? en réduisant le nombre des solutions avec les valeurs négatives par exemples. Merci de me répondre.
Revenir en haut de page
michel
Invité





MessagePosté le: 15 Avr 2005 10:57    Sujet du message: Point de Torricelli d'un triangle Répondre en citant

Bonjour, en fait je me suis tiré d'embarras en utilisant la commande :
fsolve({eq1,eq2,eq3},{x,y,z},0.1..19); permettant d'imposer des conditions aux inconnues, ici ce sont des distances inférieures aux plus long côté du triangle. L'équation due au déterminant de Caley est inutile sauf à titre de vérification. A+
Revenir en haut de page
ALS
Invité





MessagePosté le: 15 Avr 2005 11:45    Sujet du message: Re: point de Torricelli d'un triangle Répondre en citant

Bonjour,
Oui, ou comme ceci:

Code:

> a:=sqrt(277):b:=sqrt(181):c:=sqrt(340):
> eq1:=c^2=x^2+y^2+x*y: eq2:=b^2=x^2+z^2+x*z: eq3:=a^2=y^2+z^2+y*z:
> sol:={allvalues(solve({eq1,eq2,eq3},{x,y,z}))}:
> s:=map(evalf,sol);

  s := {{z = -6.606979659, x = -8.872751967, y = -12.32535739},

        {x = 8.872751967, z = 6.606979659, y = 12.32535739},

        {x = -0.5428684421, z = -13.17397252, y = 18.70452826},

        {y = -18.70452826, x = 0.5428684421, z = 13.17397252}}

> for k to nops(s) do
>   if rhs(s[k][1])>0 and rhs(s[k][2])>0 and rhs(s[k][1])>0 then print(s[k]) fi
> od;

         {x = 8.872751967, z = 6.606979659, y = 12.32535739}



Je vais essayer d'écrire une procédure qui calculera automatiquement les coordonnées du point de Torricelli, à partir de 3 points donnés par leurs coordonnées. Donc revenez faire un petit tour ici dans quelque temps.
Revenir en haut de page
ALS
Invité





MessagePosté le: 15 Avr 2005 14:11    Sujet du message: Re: point de Torricelli d'un triangle Répondre en citant

Voici la procédure Torricelli qui calcule les coordonnées du point de Torricelli d'un triangle ABC dont les 3 angles sont aigus.

Code:

> restart;
> with(geometry):
> point(A,[-6,7]): point(B,[2,-5]): point(C,[11,2]):
 
> prod_scalaire:=proc(A,B,C)
> # calcule le produit scalaire des vecteurs AB et AC.
> (HorizontalCoord(B)-HorizontalCoord(A))*(HorizontalCoord(C)-HorizontalCoord(A))+(VerticalCoord(B)-VerticalCoord(A))*(VerticalCoord(C)-VerticalCoord(A))
> end proc:
 
> prod_scalaire(A,B,C);

                                 196

> sens:=proc(A,B,C)
> # détermine si le triangle ABC est aplati, ou sinon de sens direct ou indirect
> # si ABC aplati: 0   si ABC direct: 1   si ABC indirect: -1
> local a;
> a:=0.5*(HorizontalCoord(A)*VerticalCoord(B)-HorizontalCoord(B)*VerticalCoord(A)+HorizontalCoord(B)*VerticalCoord(C)-HorizontalCoord(C)*VerticalCoord(B)+HorizontalCoord(C)*VerticalCoord(A)-HorizontalCoord(A)*VerticalCoord(C));
> # a est l'aire signée du triangle ABC
> if a=0 then 0 else sign(a) end if;
> end proc:
 
> sens(A,B,C);

                                  1

> arrondi:=proc(x)
> # arrondit x à  3 décimales
> evalf(round(x*10^3)/10^3)
> end proc:
 
> arrondi(Pi);

                             3.142000000

> Torricelli:=proc(A,B,C)
> local s,i1,i2;
> triangle(T,[A,B,C]):
> if prod_scalaire(A,B,C)<0 or prod_scalaire(B,C,A)<0 or prod_scalaire(C,A,B)<0 then error "Le triangle doit avoir ses 3 angles aigus" end if:
> if sens(A,B,C)=1 then s:='counterclockwise' else s:='clockwise' end if;
> rotation(B1,C,Pi/3,s,A); triangle(T1,[A,C,B1]):
> rotation(C1,A,Pi/3,s,B); triangle(T2,[B,A,C1]):
> rotation(A1,B,Pi/3,s,C); triangle(T3,[C,B,A1]):
> circumcircle(cc1,T1):circumcircle(cc2,T2):circumcircle(cc3,T3):
> intersection('E', cc1, cc2,[U,V]);
> i1:={map(evalf,coordinates(U)),map(evalf,coordinates(V))};
> i1:={seq(map(arrondi,i1[k]),k=1..nops(i1))}:
> intersection('F', cc2, cc3,[W,X]);
> i2:={map(evalf,coordinates(W)),map(evalf,coordinates(X))};
> i2:={seq(map(arrondi,i2[k]),k=1..nops(i2))}:
> plots[display]({draw(T,color=black),draw(T1),draw(T2),draw(T3),draw(cc1,color=blue),draw(cc2,color=blue),draw(cc3,color=blue)});
> op(i1 intersect i2) # mettre un # en tête de cette ligne pour seulement voir la figure
> end proc:

> Torricelli(A,B,C);

                     [2.845000000, -0.7640000000]


En espérant que cela vous convienne, amicalement.
ALS
Revenir en haut de page
michel
Invité





MessagePosté le: 16 Avr 2005 15:04    Sujet du message: Point de Torricelli d'un triangle Répondre en citant

Bonjour, merci beaucoup pour cette procédure qui me convient parfaitement. J'ai apprécié l'habile usage de la commande "intersection".
A bientôt.
Revenir en haut de page
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Apprendre Maple Index du Forum -> Maple en géométrie Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


phpBB

Développé par phpBB © 2001, 2006 phpBB Group
Traduction par : phpBB-fr.com


Apprendre Maple - ©  - Alain Le Stang - Navigation optimisée pour une résolution 1024 x 768.