Macros booléennes : partie 1

Premier article d'une série sur les macros booléennes : on y parle d'existence de points, de négation et de OU géométriques...

I - Découvertes

1°) Existence conditionnelle

Bien que très simple, la figure exposée ci-dessous constitue le coeur de cette série d'articles sur les macros booléennes. Elle est constituée de deux segments, de leur intersection A et enfin d'une expression E. En tout 8 objets dont le plus important est de très loin le dernier...


Figure : Existence.zir

Déplacer les extrémités des segments de façon à faire disparaître et apparaître le point A. L'expression E est définie comme cela (effectuer un clic-droit sur E pour vous en convaincre) :

if(x(A)==x(A),1,0)

A première lecture, ce test semble incompréhensible : on ne peut effectivement pas trouver plus tautologique que la question "abscisse de A égale à l'abscisse de A ?". Et pourtant CaR ne répond pas tout le temps "vrai" (valeur 1) à cette question-là : lorsque le point A n'existe pas, l'expression E continue à vivre et renvoie la valeur "faux" (valeur 0). Les autres logiciels de géométrie dynamique traitent le problème de manière très différente : comme cet objet E de type "expression" dépend du point A (de part le test x(A)==x(A)) il disparaît (ou ne renvoit aucun résultat) lorsque A disparaît.

Ce comportement très particulier du logiciel CaR est une petite porte par laquelle je vous propose de vous faufiler afin d'attaquer cette suite de découvertes sur les macros booléennes.

Rien n'interdit de transformer cette figure en macro, avec A comme seul objet initial et l'expression en final. La simplicité de cette macro (aucun objet intermédiaire...) montre encore une fois à quel point CaR peut être différent des autres logiciels de géométrie dynamique :

Cette macro est entièrement intrinsèque, à savoir qu'elle ne dépend pas du contexte géométrique qui induit l'existence ou la non existence du point A. Il n'est donc nullement utile de faire autant de macros que de situations possibles : intersection seg/seg, dte/seg, cercle/seg, etc... Comme les autres macros que nous allons voir, celle-ci est unique et générale : le point A est le seul objet initial.

A ma connaissance, il n'est pas possible de reproduire cette macro dans un autre logiciel de géométrie dynamique, i.e. qui répondrait précisément à l'énoncé suivant : "construire une macro ayant pour seul objet initial un point A, et comme final une expression qui vaut 1 si A existe et 0 sinon".

2°) La macro "NON d'un point"

Il s'agit dans cette partie de créer sur un point de base B, un point "NON A" qui existe si et seulement si A n'existe pas. En reprenant la première figure, on ajoute un point B et un point nommé "NON A" que l'on "fixe" avec les coordonnées suivantes (clic-droit sur le point) :

abscisse : if(E==0,x(B),invalid)

ordonnée : if(E==0,y(B),invalid)

On obtient ainsi la figure suivante :


Figure : NON.zir - Macros : MacrosBooleennes.mcr

Déplacer les extrémités des segments de façon à faire disparaître et apparaître le point A. Le point "NON A" correspond bien à ce que nous attendions. Voici comment transformer notre figure en macro (attention à bien suivre toutes les étapes...) :

Rendre invisible l'expression E

Désigner A et B comme objets initiaux

Ne désigner aucun objet final en cliquant directement sur

Nommer la macro "NON de point" et surtout décocher la case "Hide Duplicate" de la boîte à dialogue.

3°) La macro "OU de deux points"

Déplacer les extrémités des segments de la figure ci-dessous de façon à faire disparaître A et A'. Eventuellement continuer d'agir sur l'existence de ces deux points pour bien vous convaincre que le point nommé "A OU A' " existe si et seulement si A ou A' existe.


Figure : OUdeDeuxPoints.zir - Macros : MacrosBooleennes.mcr

Pour réaliser cette figure, E1 et E2 sont les expressions qui caractérisent respectivement l'existence des points A et A'. Le point "A OU A' " est un point que l'on "fixe" avec les coordonnées suivantes :

abscisse : if(E1+E2>0,x(B),invalid)

ordonnée : if(E1+E2>0,y(B),invalid)

Voici comment transformer notre figure en macro (attention à bien suivre toutes les étapes...) :

Rendre invisible les expressions E1 et E2

Désigner A, A' et B comme objets initiaux

Ne désigner aucun objet final en cliquant directement sur

Nommer la macro "OU de deux points" et surtout décocher la case "Hide Duplicate" de la boîte à dialogue.

II - Application : partition du plan par deux cercles

Voici pour terminer une petite figure de 16 objets. Déplacer le point M et observer la variation des indicateurs selon que ce point est dans l'union des deux disques ou dans le complémentaire de cette union. On peut aussi bien entendu déplacer les deux cercles et modifier leurs rayons.


Figure : partition.zir

La figure est simple à construire avec les deux macros dont on parlait plus haut : on se donne deux cercles a et b et le point M. Ensuite on construit dans cet ordre les points int a, int b, a U b (macro OU de deux points), a inter b , et C(a U b) (macro NON de point). Pour les détails de la construction, il suffit de faire un clic-droit sur chacun de ces points.