# CaRMetal

CaRMetal est un logiciel libre de géométrie dynamique, créé par Éric Hakenholz en 2006, à partir du moteur de C.a.R., de René Grothmann. Le logiciel est développé en langage Java. Il tire son nom de la finition « métal brossé » de l'interface Swing.

## Description
### Engagement direct

Basé sur l'a-modalité des boîtes de dialogue, CaRMetal est conçu pour que l'utilisateur soit le plus possible en engagement direct. Le fil à la patte en est l'aboutissement ultime, ce qui donne à CaRMetal un intérêt même pour l'enseignement de la géométrie à l'école primaire. Les élèves du collège, quant à eux, ont droit à une préhension immédiate de l'outil grâce à l'a-modalité mais aussi à des icônes idéographiques et non textuelles pour représenter les outils.

### Outils

La création de macros est assez conviviale, et CaRMetal est fourni avec une bibliothèque de macros assez vaste. Outre les outils classiques de création de points, cercles, droites et polygones, on peut aussi construire des coniques, des représentations graphiques de fonctions, des lieux de points ou enveloppes de droites, et même de lignes de niveau. Le repère étant systématiquement orthonormé, la représentation graphique de certaines fonctions est parfois difficile à voir. Lorsqu'une transformation a été définie pour un point, on peut l'appliquer à un ensemble de points. Un point peut être fixé à une courbe mais aussi à l'intérieur d'un cercle ou d'un polygone.

### Formats de fichier

CaRMetal exporte aux formats png, svg, encapsulated PostScript, pdf et html. Le format de fichier (extension « zir ») est d'ailleurs une description de la figure au format xml. Les propriétés des objets (comme leur couleur ou leur numéro de calque) peuvent être rendues dépendantes de grandeurs numériques via des expressions booléennes. Les textes, y compris le nom des objets, peuvent être écrits en LaTeX avec des expressions dynamiques. Ce sont les bibliothèques HotEqn et JLatexMath qui gèrent le LaTeX.

### Géométrie dans l'espace

CaRMetal est décrit comme un logiciel « 2,5D » : en effet, s'il paraît exagéré de considérer CaRMetal comme un logiciel de géométrie dans l'espace, il s'en rapproche tout de même un peu, avec des figures en perspective cavalière, que l'on peut faire pivoter à l'écran, non par les méthodes classiques en 3D que sont les angles d'Euler et les quaternions, mais en faisant glisser un point (invisible) sur l'écran. De cette manière, les mouvements de la figure sont plus réversibles qu'avec les quaternions. En effet, la multiplication des quaternions n'est pas commutative, ce qui implique qu'en refaisant les mouvements de la souris à l'envers, on ne revient pas tout à fait à la configuration initiale (avec un logiciel comme Géoplan-GéoSpace). Le mouvement réversible de CaRMetal paraît plus facile à contrôler pour certains utilisateurs.

### Particularités de CaRMetal

Dans CaRMetal, les objets peuvent être munis de magnétisme, qui leur permet d'être attirés vers des objets ou des endroits particulièrement dignes d'intérêt de la figure. Les animations peuvent être multiples (plusieurs points peuvent bouger en même temps sur des objets auxquels ils sont liés). Les animations ne sont pas bloquantes, on peut continuer la figure pendant les animations, ce qui autorise des types d'investigation spécifiques. Un outil appelé Monkey fait bouger tous les points mobiles d'une figure en suivant une marche aléatoire bornée. Il permet de vérifier la solidité de la construction (résistance au mouvement) ou encore de tester des conjectures. Son utilisation dans les exerciciels leur confère la possibilité de donner une note de qualité à la construction de l'élève. Les figures peuvent être regroupées en classeurs, où elles sont repérées par des onglets.

### JavaScript

CaRMetal est aussi doté d'un langage de script : JavaScript (avec l'interpréteur rhino de la fondation Mozilla). Cette fonctionnalité qui permet de construire des objets complexes comme des fractales ou des tableaux de fils, a pour conséquence d'extraire CaRMetal du contexte de la géométrie dynamique, et d'en faire un outil d'enseignement de l'algorithmique. Deux néologismes sont apparus: Un CaRScript est un script écrit en JavaScript sous CaRMetal, et un carscripticiel est un exerciciel dont le but n'est pas une construction géométrique mais l'évaluation d'un CaRScript. Le concept d'exerciciel d'algorithmique semble inédit.

## Intérêt didactique
### L'anticipation des constructions

Les logiciels de géométrie dynamique utilisent fortement l'engagement direct, cette impression que le logiciel interprète correctement ce que l'on veut faire (on pointe l'intersection de deux objets, le logiciel construit cette intersection). Plus généralement l'engagement direct est un comportement général du logiciel qui reconnait l'utilisateur comme sujet cognitif ayant une intention : si un élève pointe l'intersection de deux droites, c'est qu'il veut construire cette intersection. Avec l'anticipation des constructions, l'engagement direct franchit une étape supplémentaire. L'objet est préconstruit dès qu'il ne reste plus qu'un point à cliquer. Parfois, l'objet est construit et est alors déplacé avec la souris (parallèle, perpendiculaire, transformations ponctuelles). Ce déplacement participe alors à l'apprentissage de l'utilisateur par la perception qu'il donne du mouvement euclidien possible de l'objet. L'utilisateur se forge des représentations du concept qu'il manipule qui tiennent déjà compte de ces premières observations. L'anticipation des constructions permet à l'engagement direct d'aller plus loin que sans elle : il reconnait l'utilisateur aussi dans son statut d'apprenant et l'accompagne dans son apprentissage. Cet accompagnement dans l'apprentissage des concepts n'est pas le propre des classes de fin de l'école primaire ou de début de collège. Dans un autre registre, pour forger rapidement de bonnes représentations, on retrouve la même efficacité dans des micromondes non euclidiens avec des étudiants comme pour le parallélisme non arguésien du plan de Moulton ou l'orthogonalité dans cette même géométrie.

### Instrumentalisation de l’anticipation

L’anticipation des constructions, s’appliquant à tout outil, y compris les macro-constructions, on peut l’utiliser pour structurer autrement des situations d’investigation. En particulier, il n’est plus nécessaire de finaliser une construction pour infirmer une conjecture, ou encore des constructions partielles – anticipées - peuvent renforcer des conjectures. Plus généralement, cette pratique, qu’il convient d’organiser dans un premier temps, favorise une réflexion métacognitive sur ce que l’on fait en analysant la rétroaction du logiciel en cours d’utilisation, pendant la manipulation directe. Là encore, selon le contexte, cela peut se faire sur des situations euclidiennes élémentaires ou dans des géométries moins standard.

### Réalité mathématique augmentée

En géométrie dynamique, la manipulation directe permet, en introduction à la démarche hypothético-déductive, de revisiter la notion de propriété géométrique comme invariant, et plus spécifiquement comme le résultat d’une construction qui résiste au mouvement (l’orthocentre, l’intersection des médianes, etc.).
Malgré son efficacité, il y a une situation importante en mathématique où la manipulation directe perd de sa pertinence. C’est le cas quand, dans une figure de géométrie ou d’analyse, un point particulier, mathématiquement significatif, est a priori inaccessible à la manipulation directe. Le simple tiers d’un segment n’est généralement pas atteignable à la souris.
L’aimantation pondérée permet de placer un point sur un objet (pondération forte) tout en le faisant passer par un point particulier de cet objet, significatif pour la figure (pondération minimale qui maintient l’illusion de la continuité du mouvement). La manipulation directe ainsi pondérée, passant par un point significatif, rend le réalisme de la situation augmenté du sens mathématique contenu dans le cas particulier.

### Déterminisme enrichi

Réaliser un logiciel de géométrie dynamique c’est choisir, entre autres, en permanence le déterminisme (la figure reprend la même instance quand les objets initiaux reviennent à leur position initiale) plutôt que la continuité (dont le suivi continu des intersections) tout en respectant le plus possible cette continuité qui donne du sens à l’utilisateur. On sait que les deux concepts ne sont pas totalement compatibles et ce fut un travail important des pionniers en géométrie dynamique (l’équipe de Cabri Géomètre en France et de Cinderella (logiciel) en Allemagne) de dégager ce qui était réalisable ou non dans cette antinomie et de le traduire par des algorithmes.
CaRMetal a hérité du moteur de C.a.R. de la récursivité des points et des expressions. Cette récursivité permet de s’affranchir du déterminisme de manière contrôlée, mathématiquement significative, et donc prévisible (ce qui n’est pas toujours le cas de la continuité). Par ailleurs, en y ajoutant l’aimantation, on peut maintenir le déterminisme général d’une figure tout en lui autorisant des ilots de non déterminisme qui renforcent, d’une autre façon que ci-dessus, l’efficacité – ou le sens - mathématique de la simulation ou du micromonde que l’on propose à l’investigation des élèves ou des étudiants. Ce contexte nécessite d’être préparé et s’adresse donc à des enseignants qui veulent engager une ingénierie particulière. Quelques exemples simples sont téléchargeables sur les sites utilisant le logiciel, mais il ne semble pas que de véritables projets significatifs aient été développés.

### Géométrie repérée dynamique

Avec l’arrivée des scripts dans le logiciel, un nouveau champ d’investigation apparaît dans les sites d’utilisateurs. D’une manière générale, le principe est d’utiliser les aspects élémentaires de la programmation et la sortie dynamique de la figure produite par script comme processus d’intermédiation entre le numérique et l’algèbre : on perçoit du numérique (en géométrie sur quadrillage, ou en analyse dans un repère) on infère les propriétés observées de manière numérique, par une écriture algébrique qui est aussitôt testée et infirmée ou confirmée. Dans ce dernier cas on dispose d’une expression algébrique dont la validité est renforcée par l’exploration en manipulation directe : d’où l’expression de géométrie repérée dynamique (les autres pratiques de programmation étant par essence généralement statiques). Cette démarche fait le pari d’un outil intermédiaire vers l’algèbre (comme l'est aussi le tableur) tout en restant résolument du côté de l’algèbre, pas que n’a pas franchi l’usage du tableur.
La pratique est encore trop récente pour savoir si elle a véritablement l’effet qu’elle décrit.

## Système de classeurs

CaRMetal possède un système d'onglet (informatique)s, permettant de regrouper plusieurs figures en un seul classeur de figures. La navigation est très analogue à celle des tableurs, en faisant défiler les onglets et en cliquant sur celui qu'on a choisi. Un seul fichier CaRMetal peut donc contenir des dizaines de figures.

## Magnétisme

Le centre du cercle circonscrit à ABC est à l'intérieur ou à l'extérieur du triangle selon que l'angle en A est aigu ou obtus. Logiquement, on s'attend donc à ce qu'il soit sur l'hypoténuse lorsque le triangle est rectangle. CaRMetal possède bien une batterie de tests dont un sur l'alignement de points mais il est difficile avec la souris de placer A exactement sur le cercle de diamètre $[BC]$, et donc le centre est presque aligné avec B et C mais pas affiché comme aligné, l'alignement n'étant pas suffisant pour être indiqué par le test.
Pour y remédier, il est possible, après avoir créé le cercle de diamètre $[BC]$, de le rendre magnétique, en conférant à A la propriété de magnétisme, avec deux paramètres:
* le rayon d'action du champ magnétique, exprimé en pixels;
* la liste des objets auxquels A peut être attaché par le magnétisme.
Dans le cas présent, on n'a besoin que d'un seul objet, le cercle de diamètre $[BC]$. Avec un rayon d'action de quelques pixels, dès que A est proche du cercle, il devient momentanément un point lié au cercle, et l'alignement est affiché comme exact.
Lorsqu'un point est attiré magnétiquement vers un ensemble fini de points, dont les coordonnées sont fixes, il évolue dans une géométrie discrète.

## Récursivité

En créant un point M et en lui donnant comme coordonnées round(x(M)) et round(y(M)), le point est assujetti à garder des coordonnées entières (le point est un entier de Gauss). Ses coordonnées sont définies à partir d'elles-mêmes! Cette récursivité est possible (elle ne boucle pas) car créer un point l'initialise, ce qui permet de lui donner ensuite une définition récursive de ses coordonnées. Les expressions aussi sont récursives, mais leur création n'est pas une initialisation, même si elles sont initialisées à 0.

## Le Monkey

Le bouton représentant un macaque est en haut de la fenêtre; en cliquant dessus, les points mobiles de la figure entrent dans une danse effrénée sans quitter la fenêtre, et lorsqu'on lâche le bouton, ils reviennent à leur place. Cet outil permet de vérifier les invariants des constructions: Par exemple si trois droites semblent concourantes, le Monkey permet de vérifier qu'elles le restent dans de nombreux cas de figures. Si un point est attaché à une courbe, le Monkey le fait bouger de telle manière qu'il reste attaché à la courbe.
Le Monkey permet d'évaluer la qualité d'une construction, de façon invisible, en effectuant une statistique sur le nombre de cas de figure où la construction reste correcte. La construction d'un milieu au pifomètre est donc (à juste titre) annoncée comme fausse par le Monkey.

## JavaScript

Les CaRScripts sont une fonctionnalité qui fait de CaRMetal un peu plus qu'un logiciel de géométrie dynamique, et même un outil d'enseignement de l'algorithmique. La programmation se fait dans un contexte géométrique plutôt que numérique. Depuis la version 3.6, un CaRScript peut être lancé à l'occasion d'un évènement comme le mouvement d'un point, ce qui amène à la programmation événementielle. Cette fonctionnalité permet (entre autres) de rendre réversibles certaines constructions.

## Réseau

Depuis la version 3.8, plusieurs utilisateurs peuvent s'échanger leur figure en temps réel, par un Intranet ou l'Internet, via l'un d'entre eux appelé serveur. Après que les différents utilisateurs se sont connectés au serveur à l'aide de son adresse IP, les actions suivantes sont possibles :
* chaque utilisateur peut envoyer la totalité de sa figure au serveur, dans un onglet consacré à chacun ;
* chaque utilisateur peut envoyer certains objets qu'il a choisis au serveur, dans un même onglet commun à tous (mutualisation) ;
* le serveur peut visualiser ou vidéoprojeter en temps réel la construction de chaque utilisateur et lui renvoyer une correction si nécessaire ;
* le serveur peut lancer le « Mode conférence », ou « Travail collaboratif » qui permet à chaque utilisateur connecté de voir et manipuler la même figure, en temps réel (nécessite une certaine coordination, en raison de concurrences possibles).
Pour plus de détails, on pourra consulter cet article, décrivant la fonctionnalité et une utilisation possible en classe.

## 3D

Depuis la version 4.0, CaRMetal a un mode 3D qui permet de faire des constructions dans l'espace, ainsi que des améliorations sur le JavaScript comme
* la présence de la langue française donnant des scripts plus proches du pseudocode en français
* un mode "débutant" qui remplace les morceaux de code engendrés automatiquement, par des équivalents en programmation impérative.

## Tortue

La version 4.1 est munie d'un graphisme "tortue" fonctionnant également en 3D.