CaRMetal-FR

Forum des utilisateurs francophones
login.php?sid=d5f78a6d5ea51283a0891c86a24168f5 profile.php?mode=register&sid=d5f78a6d5ea51283a0891c86a24168f5 faq.php?sid=d5f78a6d5ea51283a0891c86a24168f5 memberlist.php?sid=d5f78a6d5ea51283a0891c86a24168f5 search.php?sid=d5f78a6d5ea51283a0891c86a24168f5 index.php?sid=d5f78a6d5ea51283a0891c86a24168f5

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

 
Poster un nouveau sujet   Répondre au sujet    CaRMetal-FR Index du Forum -> Les CaRScripts
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
stephrey



Inscrit le: 20 Jan 2011
Messages: 16
Localisation: Limoges

MessagePosté le: Dim Jan 30, 2011 10:56 pm    Sujet du message: Méthode du point fixe : barycentre et autres curiosités Répondre en citant

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.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
yves974
Site Admin


Inscrit le: 30 Oct 2007
Messages: 244
Localisation: Réunion

MessagePosté le: Lun Jan 31, 2011 5:32 pm    Sujet du message: Re: Méthode du point fixe : barycentre et autres curiosités Répondre en citant

stephrey a écrit:

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
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    CaRMetal-FR Index du Forum -> Les CaRScripts Toutes les heures sont au format GMT
Page 1 sur 1

 
  
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
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
Traduction par : phpBB-fr.com