Choose a langage

Évolution du logiciel CaRMetal

CaRMetal est disponible sur ce site depuis le 28 Octobre 2006. Le blog ci-dessous donne un aperçu de l'évolution du logiciel.

1) La tortue dynamique mutante a été finalisée et est désormais bien intégrée au logiciel.

La tortue se programme dans un CaRScript.
On dispose désormais de boutons tortue dans l'assistant de scripts. Ces boutons génèrent du code tortue.

boutons 2D4
En 2D
boutons3D4
En 3D

Si on active le BEGINNER Mode (case à cocher), on génère du code tortue en français (et du Javascript simplifié francisé).
Rappelons que l'on peut basculer d'un mode à l'autre à tout moment et que l'on peut écrire un code mixte, celui-ci sera correctement exécuté.

Remarque : les angles sont en degré, et les longueurs sont dans l'unité utilisée dans la figure.

1ère ligne :
Le premier bouton, qui représente une tortue sortant de son oeuf, génère la CaRCommande AttacherTortue(...). Cette CaRCommande est indispensable pour activer la tortue et/ou pour l'attacher à un point.
Viennent ensuite les traditionnels Avancer, Reculer, TournerGauche, TournerDroite.
On a enfin une CaRCommande Vitesse pour fixer la vitesse de la tortue (entre 0 et 100). Cette CaRCommande est purement cosmétique.

2ème ligne :
On a d'abord BaisserStylo, LeverStylo.
Puis viennent CacherTortue, MontrerTortue.
Enfin, on a les CaRCommandes d'orientation, absolue (orienter d'un certain angle) et en direction d'un point voire 2 points en 3D (viser).

3ème ligne :
Il s'agit de CaRCommandes de la tortue mutante. Le but est de récupérer soit le point atteint, soit le segment parcouru, soit les deux.  

ligne spécifique à la 3D :
En 3D, il y a trois types de rotation : TournerGauche & TournerDroite, PivoterHaut & PivoterBas, PivoterGauche & PivoterDroite.
Les boutons génèrent le code de ces rotations.

La tortue doit toujours être attachée à un point, faute de quoi elle n'existe pas.
Tout code tortue doit donc commencer par la CaRCommande AttacherTortue(). L'argument est un nom de point qui peut déjà être dans la figure ou que l'on peut créer par script juste avant.

Si un point A existe déjà dans la figure, dans l'exemple ci-dessous le script de droite donne la figure de gauche.

Une autre méthode consiste à créer le point par script :

carre 02

 On va maintenant illustrer les CaRCommandes de la tortue mutante.
Imaginons que l'on souhaite construire la figure suivante :

On veut récupérer les sommets du carré.
Voici un script possible :

Si on n'avait pas mis la CaRCommande CacherTortue, la tortue resterait visible sur la figure.
Mais dès lors que l'on enregistre la figure, la tortue est désintégrée (elle disparaît visuellement au bout de quelques secondes, c'es normal), il ne reste que la construction.
Dans CaRMetal, la tortue ne se contente pas de laisser une trace, c'est un véritable outil de constuction qui produit des points et des segments qui peuvent être dynamiques.

On va maintenant illustrer ce côté dynamique de la tortue, puis son intégration avec les macros, en revisitant le classique arbre de Pythagore.
On terminera par un arbre de Pythagore 3D dépliable pour montrer le fonctionnement en 3D.

On part d'une figure avec deux points A et B, et un curseur a. Et on procède par récursivité.
L'ébauche de script ci-dessous (qui sera adaptée pour construire l'arbre) produit seulement un carré dynamique en A et B :

Mais il suffit alors de récupérer le point qui manque pour enclencher la récursion :

 

On obtient cette figure :

On pourrait résoudre le problème en relevant le stylo lors du tracé du segment isolé (on obtientrait alors des "feuilles" carrées comme dans l'arbre traditionnel).
On peut aussi ajouter le segment manquant en utilisant la CaRCommande Segment au bon endroit (et on obtient alors des "feuilles" triangulaires).

La figure est en p-j de l'article.

Une autre méthode pour construire l'arbre de Pythagore consiste à utiliser un script tortue pour construire une macro, et d'utiliser ensuite cette macro selon la méthode présentée dans cet article MathemaTICE. On commence par un script bien innocent :

 

On construit alors une macro Pytha qui a trois initiaux A,B, a et pour finaux les 4 côtés du carré et les trois points utiles à la récursion.

On va alors utiliser ExecuteMacro, et il faut d'abord établir l'ordre des finaux qu'elle renvoie.
On annule le script précédent qui a permis de créer la macro. Puis on crée un nouveau script dans le seul but de jauger l'effet de ExecuteMacro.

 

On voit que t[1] correspond à D, t[3] correspond à E et t[4] correspond à F.

On peut alors créer un nouveau script pour construire l'arbre :

On obtient cette figure.

Pour éviter l'apparition des derniers points, il suffit de les masquer :

Enfin, on peut choisir l'apparence par défaut des points et des segments, soit via l'interface générale et le couplage des palettes Construction et Aspect&Couleur, soit par script en utilisant la CaRCommande SetIconSelection (qui fait la même chose, mais à distance = la CaRCommande va modifier les préférences utilisateur).

 La figure est en p-j de l'article.

Pour les lecteurs les plus avancés, on ajoute un tuto vidéo sur la création d'un arbre de Pythagore 3D dépliable (la figure est en p-j).
Ce tuto difficile peut être ignoré dans un premier temps. Il montre que la création d'une macro à partir d'un script tortue peut aussi être fait en 3D.

 

2) Apparition de la CaRCommande getRealScript

Comme on l'a dit plus haut, on peut utiliser écrire du code mixte (JS simplifié / JS, CaRCommandes en français / anglais), celui-ci sera correctement exécuté.
Avant d'être exécuté, le code du CaRScript est passé à la moulinette d'expressions régulières qui permettent ce confort d'utilisation.
Et on a la possibilité de faire afficher le code du CaRScript après l'application des RegEx, donc tel qu'il sera effectivement exécuté. Cela se fait dans un script (qui s'affiche lui-même en quelque sorte) et permettrait potentiellement de détecter une erreur qui serait due au logiciel dans l'interprétation du JS simplifié (ou de se convaincre du contraire...).
Il est conseillé de placer getRealScript dans une CaRcommande Println en début de script (de cette façon, getRealScript ne peut pas être perturbé par une erreur qui serait ultérieure dans le script).

Exemple :

------------------------------------------------------------------------------------------
Tortue vs multi-tortue : exemple des courbes de poursuite

Remarque : cette partie est dificile et peut être survolée/ignorée en première lecture.

Il y a une seule tortue dans CaRMetal, et celle-ci est à considérer comme un outil ou comme l'essence de la tortue.
Si l'on veut par exemple construire une courbe de poursuite (qui demande a priori un mode multi-tortues), on peut par exemple le faire en créant un objet javascript tortue.
Pour les afficionnados de la programmation en Javascript, voici un exemple de constructeur possible :

On peut alors utiliser ce constructeur pour créer un script multi-tortues :

Et on obtient les courbes de poursuite :

Le figure est en p-j.

Pièce(s) jointe(s):
Télécharger ce fichier (arbrePythagore-01.zirs)arbre de Pythagore sans macro[classeur CaRMetal]1 Ko
Télécharger ce fichier (arbrePythagore-par-macro.zirs)arbre Pythagore par macro[classeur CaRMetal]2 Ko
Télécharger ce fichier (poursuites.zirs)courbes de poursuite[classeur CaRMetal]1 Ko
Télécharger ce fichier (pytha3D-01.zir)arbre de Pythagore 3D[figure CaRMetal]190 Ko