login.php?sid=890378a7d5edd27262cc21dbc6163c18 profile.php?mode=register&sid=890378a7d5edd27262cc21dbc6163c18 faq.php?sid=890378a7d5edd27262cc21dbc6163c18 memberlist.php?sid=890378a7d5edd27262cc21dbc6163c18 search.php?sid=890378a7d5edd27262cc21dbc6163c18 index.php?sid=890378a7d5edd27262cc21dbc6163c18

Méthode du point fixe : barycentre et autres curiosités

 
Post new topic   Reply to topic     Forum Index -> Les CaRScripts
View previous topic :: View next topic  
Author Message
stephrey



Joined: 20 Jan 2011
Posts: 16
Location: Limoges

PostPosted: Sun Jan 30, 2011 10:56 pm    Post subject: Méthode du point fixe : barycentre et autres curiosités Reply with quote

Soit M un point mobile du plan.
On construit un point N qui dépend du point M et d'autres objects de la figure.
On cherche alors à faire coïncider le point M avec le point N.
On construit la suite M_{i+1} = M_{i}+k*(N_{i}-M_{i}) et on s'arrête lorsque M_{i} et N_{i} sont "suffisamment proches".

On veillera tout particulièrement au choix du coefficient k.
Si il est mal choisi, il fera diverger la suite des M_{i}.

Voici un CaRScript mettant en application la méthode :

Code:

ZC=Packages.eric.JZirkelCanvas.getCurrentZC()
CC = ZC.getConstruction();
M = CC.find("M");
N = CC.find("N");

k = 1/2;
MaxIteration = 500;
epsilon = 1e-8;
pointFound = false;

iteration = 0;
do{
   xM = M.getX();
   yM = M.getY();
   xN = N.getX();
   yN = N.getY();
   xK = xM+k*(xN-xM);
   yK = yM+k*(yN-yM);
   
   M.move(xK,yK);
   CC.dovalidate();
        ZC.paint(ZC.getGraphics());

   dx = Math.abs(xM-xN);
   dy = Math.abs(yM-yN);
   
   if ((dx<epsilon)&&(dy<epsilon)){
      pointFound = true;
   }
   iteration++;
}while (!pointFound && iteration<MaxIteration)

Println("nombre d'itérations : " + iteration);
if (!pointFound) {Println("Point non trouvé");}


Remarques :
Pour récupérer les coordonnées du point M et le déplacer, ce CaRScript n'utilise pas
X("M"), Y("M") et Move("M",x,y).
En effet, à chaque fois que ces fonctions sont invoquées, la liste des objets de la figure est ont parcourue séquentiellement à la recherche d'un point de nom "M".
Si ce n'est pas très efficace lorsque la figure comporte de l'ordre d'une dizaine d'objets, cela devient catastrophique lorsque la figure comporte des centaines d'objets et que les appels se trouvent dans une boucle.

L'instruction M = CC.find("M"); cherche le point de nom "M" dans la figure et place dans la variable M une référence à ce point. Ceci permettra, à l'intérieur de la boucle, un accès direct au point M.

L'instruction CC.dovalidate(); recalcule tous les objets de la figure. Une optimisation possible du CaRScript serait de ne recalculer que les objets dont M dépend.

Enfin, ce qui prend beaucoup de temps, c'est l'affichage.
La suppression de la ligne ZC.paint(ZC.getGraphics()); accélère beaucoup le CaRScript.

Première application : trouver l'isobarycentre des trois points A,B et C
Les points A, B et C étant donnés, on place un point M quelque part sur la figure. On construit le point N comme le translaté de M par le vecteur $\vec{MA}+\vec{MB}+\vec{MC}$.
Lorsqu'on éxecute le CaRScript, les points M et N se rejoignent sur l'isobarycentre.

Bien sûr, vous m'expliquerez qu'il y a plus simple, qu'il me suffit de créer un point G, de dextrocliquer (néologisme : cliquer avec le bouton droit de la souris) dessus, d'aller dans l'onglet numérique de la fenêtre des propriétés du point et d'entrer les formules qui conviennent.
Alors pourquoi la méthode du point fixe ? Parcequ'elle permet de résoudre des problèmes qu'il est difficile voire impossible de résoudre par construction à la régle et au compas.

Seconde application : trouver le centre du cercle circonscrit au triangle ABC
La construction pour la méthode du point fixe se révèle plus difficile que la construction classique.

On cherche un vecteur dépendant de A, B, C et M qui soit nul lorsque M est le centre du cercle circonscrit au triangle ABC. Attention, si cette dernière condition est nécessaire, elle n'est pas suffisante.
Voici une proposition de construction :
Soient les cercles r_A, r_B et r_C de centre M et passant respectivement par les points A, B et C.
r_B et r_C coupent respectivement la demi-droite [MA) aux points A_B et A_C
r_C et r_A coupent respectivement la demi-droite [MB) aux points B_C et B_A
r_A et r_B coupent respectivement la demi-droite [MC) aux points C_A et C_B

Soit A_{1} le milieu des points A_B et A_C
Soit B_{1} le milieu des points B_C et B_A
Soit C_{1} le milieu des points C_A et C_B

On construit enfin N comme le tranlaté de [M] par le vecteur $\vec{A_{1}A}+\vec{B_{1}B}+\vec{C_{1}C}$.

Troisième application : un isobarycentre un peu particulier

Soit un triangle ABC et trois cercle r_A, r_B et r_C respectivement centrés en A, B et C.
On place le point M quelque part sur la figure.

Soit A_1 l'intersection du cercle r_A avec le segment [MA]
Soit B_1 l'intersection du cercle r_B avec le segment [MB]
Soit C_1 l'intersection du cercle r_C avec le segment [MC]

On cherche à déplacer M pour qu'il soit le barycentre des points A_1, B_1 et C_1.

Si quelqu'un sait construire ce point à la règle et au compas, je suis preneur.
Back to top
View user's profile Send private message
yves974
Site Admin


Joined: 30 Oct 2007
Posts: 261
Location: Réunion

PostPosted: Mon Jan 31, 2011 5:32 pm    Post subject: Re: Méthode du point fixe : barycentre et autres curiosités Reply with quote

stephrey wrote:

Si quelqu'un sait construire ce point à la règle et au compas, je suis preneur.


Régle et compas c'est peut-être pas faisable, faudrait chercher un peu plus, mais faire ça avec CaRMetal sans CaRScript en une ligne d'instruction pour définir M, oui : c'est bien entendu la même méthode que vous, mais en utilisant le fait que les points peuvent être récursifs entre eux (ici M et U).

Là j'ai mis une animation pour qu'on ait le temps de voir ce qu'il se passe. Pour recommencer, décocher fixe et retaper l'instruction. On pourrait peut-être sophistiquer avec une case à cocher pour (essayer de) ne pas avoir à recopier le code.

On peut déplacer A, B, C bien entendu ça suit la solution (ce que ne ferait pas un script, sauf dans une boucle "while true"). C'est un peu ce que l'on a sauf qu'en arrêtant l'animation on peut déplacer A, B, C sans que M ne se déplace.

Je vous rassure je ne suis pas du tout "anti-script" (loin de là) et, n'étant pas vraiment versé dans la programmation, je suis même admiratif de vos propositions. Mais comme formateur pour les futurs enseignants et les enseignants titulaires, je milite plutôt pour apprendre déjà - en formation donc - à utiliser ce que sait faire CaRMetal sans script pour ensuite voir ce qu'apporte les scripts
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic     Forum Index -> Les CaRScripts All times are GMT
Page 1 of 1

 
  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You cannot download files in this forum


Powered by phpBB © 2001-2004 phpBB Group
phpBB Style by Vjacheslav Trushkin