Tous ceux qui ont eu un jour une classe de spécialité de terminale ES se sont trouvés confrontés à la difficulté que représente, pour des élèves qui ne font presque plus de géométrie, la notion de fonction de deux variables. Pour répondre à ce besoin, je me suis lancé dans le développement d’un logiciel. Petit retour d’expérience : du développement à l’utilisation en classe.
I – Un paradoxe apparent
Lorsque j’ai découvert le programme destiné aux « spécialistes » en mathématiques de première et terminale ES, et plus particulièrement la partie dévolue à l’espace, je me suis immédiatement dit qu’il était très intéressant : l’ensemble étant essentiellement tourné vers la représentation de fonctions de deux variables, comme outil d’analyse de situations économiques.
Bien vite, j’ai du m’adapter au fait que la majorité des élèves s’orientant vers cette spécialité ne présente que rarement un goût prononcé pour la géométrie dans l’espace et, chose bien plus fâcheuse, n’a souvent pas ou peu développé les représentations en trois dimensions qui sont nécessaires à la pratique de cette dernière.
Pourtant, un constat paradoxal s’impose : la plupart des adolescents passent une partie non négligeable de leur temps à manipuler des représentations d’objets tridimensionnels, puisque les jeux vidéos les plus en vogue sont « en 3D ». Pourquoi ne pas tenter de créer un lien entre ces représentations et celles attendues en mathématiques ?
II – Des choix techniques
L’obstacle principal était évidemment technique, mais comme je suis un petit peu touche à tout dans le domaine de l’informatique et de la programmation, j’ai décidé de faire quelques essais, dans un premier temps par jeu et simple curiosité. Les premiers résultats furent encourageants et je décidai donc de me lancer dans un projet dont le cahier des charge était le suivant : produire un logiciel libre de représentation de fonctions de deux variables, facile d’accès pour un élève, permettant de manipuler à la souris des surfaces et d’afficher leurs intersections avec des plans. Le tout fonctionnant sur une machine de type netbook et sur les trois plateformes principales : Windows, Mac OS X et GNU/Linux.
Pour lutter (autant que possible, vu mon niveau technique ;) ) à armes égales avec nos concurrents ludiques, je décidai d’employer la bibliothèque logicielle openGL, très souvent utilisée dans le monde du jeu vidéo. Pour ceux que la partie technique intéresse, Ying est développé en C++, à l’aide de la bibliothèque WxWidgets. Le lecteur curieux pourra consulter l’annexe technique située à la fin de cet article.
Le nom du logiciel est à la fois un clin d’œil au monde du logiciel libre (même si les acronymes récursifs semblent agacer ces derniers temps) et une précision sur son but : Ying Is Not a Grapher (Ying n’est pas un grapheur de fonctions).
Un petit mot pour préciser que mon intention n’était bien sûr pas de réinventer la roue : en effet, les solutions libres existantes comme GNU Plot sont certes mathématiquement performantes (et beaucoup plus que ne le sera jamais Ying) mais peu adaptées aux élèves selon les critères exposés ci-dessus.
III – Les débuts
C’est à ce moment là que le projet fut retenu comme sujet d’un atelier de l’IREM de La Réunion, une première pour moi et surtout une expérience très enrichissante grâce à la qualité des échanges qui ont eu lieu dans ce cadre.
Les premières utilisations du logiciel en classe ont été faites à l’aide d’un ordinateur portable relié à un vidéoprojecteur manipulé par mes soins. Il s’agissait alors d’illustrer de manière dynamique le cours, les exemples et les exercices de base présentés en classe.
Le logiciel suscita un intérêt certain auprès des élèves qui demandèrent à le manipuler et, pour quelques téméraires, à pouvoir l’installer chez eux.
Voici, pour mémoire, ce que cela pouvait donner :
En version pleine :
Avec des lignes de niveaux z = k :
Remarquez les couleurs choisies avec goût (si le lecteur a une âme d’artiste, l’auteur serait ravi de recevoir quelques conseils esthétiques d’ordre graphique ;) )
Les remarques et questions formulées par les élèves amenèrent immédiatement des demandes d’amélioration et d’ajout de fonctionnalités.
Ce qui fut fait en vue d’une utilisation en salle informatique cette fois, les élèves disposant d’un ordinateur pour deux.
IV - Un exemple pour se familiariser avec le logiciel
Je vous propose de suivre pas à pas un exemple inspiré de cette séance qui nous permettra, je l’espère, de nous familiariser avec les fonctions essentielles du logiciel.
Le sujet qui nous servira de support est l’exercice 3 du sujet du bac ES Asie de juin 2008. Il s’agit de visualiser une surface n’ayant rien de naturel pour le commun des mortels (voire même pour les autres !).
La figure de l’énoncé se présente ainsi :
L’exercice consiste essentiellement à l’étude des intersections de la surface d’équation z = x ln y avec 3 plans parallèles aux plans de base :
le plan d’équation x = 3,5
le plan d’équation y = 2
le plan d’équation z = 1
1 - Obtention de la surface
À l’avant, le « recourbement » de la figure n’est pas évident à visualiser (et non, n’est pas consécutif à une feuille repliée lors de la photocopie du sujet ...).
L’interface graphique de Ying est composée de trois zones :
- Un menu classique en haut
- La fenêtre d’affichage à gauche
- Des onglets à droite
Pour obtenir la figure on peut : - cliquer sur modifier la fonction f dans l’onglet fonctions.
- régler l’ensemble de définition (bouton en bas dans tous les onglets). (astuce : un appui sur la barre d’espace tente de nous positionner au mieux, avec un point de vue se situant au centre du parallélépipède rectangle correspondant à l’ensemble de définition)
dans le menu outils->boite, régler la position sur 3.
À l’aide du logiciel, on peut « tourner » la figure et obtenir des angles de vue plus « clairs » pour les élèves (et leur professeur ? :) )
Le même angle de vue :
Un autre :
Un troisième :
Avec les lignes de niveaux (onglet fonctions, Afficher les lignes de niveaux) :
Astuce : le logiciel permet de faire tourner la figure de trois façons différentes :
- À la souris, en mode caméra (vous bougez la caméra) : c’est le comportement de base.
- À la souris, en mode déplacement de l’objet (vous bougez la figure) : il suffit d’aller dans le menu Préférences et de choisir l’option adéquate. De même, le zoom, géré par la molette est configurable.
- Au clavier, à l’aide des flèches et des touches Page suivante, Page précédente pour le zoom.
2 - Intersection avec des plans parallèles aux plans de base
On peut visualiser l’intersection de la surface S et du plan d’équation x = 3,5 : Aller dans l’onglet Plans
Astuce : On peut, à l’aide des curseurs et des boutons qui se passent d’explications (n’hésitez pas à faire des essais), afficher 3 plans. Il est également possible de visualiser en coupe, grâce au bouton... couper (!), qui possède trois états, permettant d’afficher l’intersection de la surface et de l’un des deux demi-espaces.
En coupe :
En coupe, vue de face :
Pour obtenir les projections sur les trois plans de base, appuyer sur la touche v, ou utiliser le menu Affichage->Vues
On peut visualiser l’intersection de la surface S et du plan d’équation y = 2 :
En coupe :
En coupe, vue de face :
On finit par l’intersection avec le plan d’équation z = 1 :
Remarquez sur cette dernière capture d’écran les deux triangles qui n’apparaissent pas de la même couleur que le reste de la surface. Ils sont parallèles au plan d’équation z = 0, et comme le logiciel se sert d’un vecteur normal et de la position de la source lumineuse pour calculer la couleur des objets, cela crée cet effet d’optique parasite.
V - Une activité un peu plus élaborée : la notion de minimum d’une fonction de deux variables – approche graphique
Afin de montrer l’utilisation qui peut être faite du logiciel, je vous propose une activité réalisée en salle informatique. Je me suis inspiré de l’exercice de spécialité de l’épreuve de métropole du baccalauréat de la série ES de juin 2010. L’objectif de cette activité est d’utiliser le logiciel Ying afin de visualiser, lorsque c’est possible, les réponses aux questions posées.
Elle a été proposée après une courte initiation au logiciel (voir plus haut) suivie d’un exercice où j’ai demandé aux élèves de représenter une fonction de deux variables déjà vue en exercice et les ai laissé explorer les possibilités du logiciel. Les fonctionnalités qui ont eu le plus de succès sont la manipulation des échelles et, bien évidemment, la modification des paramètres d’affichage (couleur, transparence, reflets ...).
Dans l’activité qui nous intéresse, le logiciel peut servir à conjecturer une réponse qui est démontrée par la suite, ou à visualiser ce qui a été préalablement démontré.
Le problème est le suivant :
Un équipementier fabrique pour une usine de l’industrie automobile deux types de sièges : un modèle « luxe » et un modèle « confort ».
Soit x le nombre, exprimé en centaines, de sièges « luxe » et y le nombre, exprimé en centaines, de sièges « confort » produits chaque mois.
La fonction coût mensuel de production est la fonction F définie pour x et y appartenant à l’intervalle [0 ; 3] par :
$F (x, y) = x^{2}$−$2x+y^{2}$−$4y+6$
F (x, y) désigne le coût mensuel de production, exprimé en dizaines de milliers d’euros, pour x centaines de sièges « luxe » et pour y centaines de sièges « confort ».
Le but de l’exercice est de déterminer graphiquement les quantités mensuelles respectives de sièges « luxe » et « confort » que l’équipementier doit produire à partir du mois de juillet 2010 pour minimiser le coût mensuel de production.
Après quelques manipulations, on obtient une figure qui ressemble à cela :
On peut alors utiliser l’intersection avec des plans de type x = k puis y = k’ pour déterminer les valeurs de x et y correspondant au minimum de F. La manipulation des curseurs permet de conclure assez rapidement.
La partie algébrique du problème devient alors une vérification des conjectures obtenues par lecture graphique.
VI - L’avenir
Les nouveaux programmes de la série ES prévoient la disparition des fonctions de deux variables à la rentrée 2012. Le logiciel Ying voit ainsi son existence déjà compromise ... dans le secondaire. On peut espérer qu’il continuera son chemin dans le supérieur si on lui trouve un certain intérêt.
On pourrait aussi imaginer des projets d’algorithmique se basant sur quelques idées contenues dans le code de Ying dans le cadre de la future option Informatique - Sciences du Numérique.
Pour ma part, je retire de cette aventure une expérience technique qui devrait me permettre un réinvestissement dans de futurs développements.
Mais le plus intéressant reste les échanges que j’ai pu avoir avec les élèves et les nombreux collègues qui se sont investis dans le projet. Qu’il me soit permis de les remercier pour leur soutien et la motivation qu’ils m’ont apportée.
Liens :
- Une partie de cet article est une réécriture d’articles publiés sur le site de l’IREM de La Réunion
- Télécharger Ying : Site de développement
Ying a été écrit en C++, en utilisant les bibliothèques OpenGL pour la partie affichage en 3D et wxWidgets pour l’interface graphique.
Le développement s’est fait avec l’éditeur Code::Blocks sous Ubuntu, avec utilisations de chaines de compilations croisées permettant d’obtenir les binaires exécutables Windows depuis GNU/Linux. Une possibilité de compiler à l’aide de CMake a été rajoutée (pour MacOS X notamment).
wxWidgets est un ensemble d’objets C++ permettant de construire rapidement une interface graphique qui aura la particularité de s’adapter au système d’exploitation visé. Contrairement à ses homologues que sont Qt et GTK, wxWidgets vient en quelque sorte se greffer sur le système hôte, ce qui a pour effet de rendre l’application conforme aux habitudes du système (fenêtres, emplacement des menus et boutons ...).
- Quelques avantages de wxwidgets et opengl :
-
- Le programme final peut être distribué sous n’importe qu’elle licence (ceci est vu comme un inconvénient par certains défenseurs du logiciel libre).
- Le programmeur n’a pas à apprendre l’utilisation de plusieurs bibliothèques (ensemble de programmes déjà créés et réutilisables) - normalement une pour chaque système d’exploitation. C’est ce qui fait que la plupart des programmes habituels ne fonctionnent que sur une seule plateforme.
- Quelques inconvénients :
- Le passage d’un système à l’autre n’est pas si simple, car même les systèmes Mac OS ou Windows sont très divers selon leurs versions, et il peut exister des différences subtiles à corriger pour chaque version du programme (en pratique 2 lignes de code, mais ce n’est pas toujours facile de savoir où elles se trouvent … un bug récalcitrant sur linux, avec carte graphique intel m’a ainsi bloqué pendant un mois, tout ça pour l’interversion de deux lignes, interversion qui semblait anodine !)
- wxWidgets est un peu l’ancêtre des bibliothèques graphiques, avec une documentation parfois éparpillée et un style de programmation que les amateurs de Qt ou GTK pourront qualifier de vieillot.
Point de vue algorithmique
Du point de vue algorithmique, deux points ont nécessité un travail important :
- L’analyseur syntaxique de l’expression des fonctions.
C’est un problème classique, et le langage C/C++ n’offre pas de solution simple (contrairement aux langages interprétés).
J’ai opté pour une transformation de l’expression en une pile de type polonaise inverse, qui permet de garder une performance honnête lors des calculs, tout en ayant un algorithme relativement simple.
L’option la plus performante aurait été d’utiliser un analyseur existant comme muParser (libre) qui produit un code machine compilé en temps réel, mais cela rajoutait une dépendance supplémentaire et donc des problèmes potentiels supplémentaires pour un gain peu important, car Ying ne calcule les valeurs de f(x ;y) qu’une seule fois, à chaque modification de la fonction, et non à chaque image à afficher.
Une dernière option aurait été d’utiliser une bibliothèque de calcul formel, mais avec un alourdissement important du programme, dont ce n’est pas l’objectif.
L’analyseur obtenu mériterait d’être amélioré.
- L’affichage des courbes de niveaux de type z=k.
Ce problème est beaucoup moins classique.
Quatre approches ont été envisagées :- Opérer une recherche de lignes de niveaux, en parcourant le maillage de points, de proche en proche. Algorithme testé, et qui donne de piètres résultats en terme de performance et de gestion des irrégularités. Il reste néanmoins utile pour tracer des « courbes » de niveaux.
- Intervenir au niveau du rendu même : changer la couleur des points affichés à l’écran, en fonction de leur côte. Ce n’est pas prévu par OpenGL qui est inclus dans les cartes graphiques et donc non modifiable facilement (cette technique pourrait être la plus performante et la plus simple, mais il semble que ce besoin « mathématique » ne soit pas partagé par les créateurs de jeux vidéos :) ).
- Utiliser le calcul formel pour déterminer des équations des lignes de niveaux.
- La solution retenue est de découper la surface en triangles , eux mêmes redécoupés en polygones de couleur unique (compris entre deux lignes de niveaux). Il a fallu être particulièrement attentif au sens des vecteurs normaux à chacun de ces polygones, ces vecteurs normaux conditionnant l’éclairage de la surface.
Un petit exemple en gros plan de ce que cela donne :
On pourrait imaginer un projet algorithmique se basant sur cette idée dans le cadre de la future option Informatique - Sciences du Numérique , même si une partie des notions requises aura disparu du programme de mathématiques de lycée.