Boole'se functies in Cabri TM

Overzicht  ][  Cabri | Cabri-FAQ | Cabri-macro's | Meetkunde | Analyse


Zie ook de pagina "Voorwaardelijke punten"

Overzicht terug

  1. Inleiding cabrisignal.gif (160 bytes)
  2. Een voorbeeld cabrisignal.gif (160 bytes)
  3. Enkele Boole'se functies in Cabri
       3.1. BEval0
       3.2. NotBEval0
       3.3. NOT(boolean) cabrisignal.gif (160 bytes)
       3.4. BAND en BOR cabrisignal.gif (160 bytes)
  4. Vergelijken van twee getalwaarden
       4.1. BKleinerGelijk
       4.2. BGroterGelijk cabrisignal.gif (160 bytes)
  1. Download cabrisignal.gif (160 bytes)

1. Inleiding terug
Met Cabri is het mogelijk, deels via ingebouwd functies, deels via macro's, JA/NEE vragen te beantwoorden.
Zo zien we in het Eigenschappen-menu:
boole1.gif (3513 bytes)
En met behulp van een macro kan bijvoorbeeld de vraag "Ligt dit punt tussen (of op één van) twee evenwijdige lijnen?" worden beantwoord.
Klik hier >Applet< voor een CabriJavapplet ter illustratie.
In de applet is een aangepaste versie van een macro met de naam VoorwPunt gebruikt (zie Cabri-FAQ, vraag 35).
We zullen in paragraaf 2 een Cabri-functie definiëren die (min of meer) hetzelfde gevolg heeft als de in deze applet gebruikte macro.

2. Een voorbeeld terug

boole2.gif (2789 bytes) Bij het beantwoorden van een vraag als "Ligt dit punt tussen twee evenwijdige lijnen" maken we vaak gebruik van numerieke waarden.
In dit geval is het antwoord op de vraag JA, als de som van de afstanden van P tot elk van de lijnen gelijk is aan de afstand tussen beide evenwijdige lijnen.
Is d(m,n) ¹ d(P,m) + d(P,n), dan is het antwoord NEE.

Het verplaatsen van een punt op het tekenblad van Cabri waarbij een punt "precies" op een lijn komt te liggen, is schier onmogelijk (zie daarvoor CabriFAQ-17 en CabriFAQ-35).
Ook in het onderhavige geval hebben we daarmee te maken.
Vandaar dat we bij het definiëren van de functies (meestal via macro's) steeds een zekere mate van (on)nauwkeurigheid zullen moeten incalculeren.
We bekijken nu de waarde van q in:
q = d(P,m) + d(P,n) - d(m,n)
(1)   q = 0 als P tussen de evenwijdige lijnen m en n ligt;
(2)   q ¹ 0 als P niet tussen m en n ligt.

Omdat bij het verplaatsen van het punt P de waarde van q dus (bijna) nooit precies 0 wordt, kiezen we als nauwkeurigheid (bijvoorbeeld) 0,05.
We zeggen in Cabri dus:
q = 0 als -0,05 < q < 0,05
We bekijken in dit verband de Cabri-functie boolef1.gif (1324 bytes)
Opmerking
Zie voor de Cabri-functies CEIL en FLOOR de pagina "CabriFAQ-34".
[einde Opmerking]

De grafiek van de functie f staat hieronder:

boole3.gif (3474 bytes)

We zullen in Cabri de uitkomst 1 (true) van deze functie interpreteren als JA, en de uitkomst 0 (false) als NEE.
De functiewaarden 0 en 1 noemen we Boole'se waarden (Eng. Boolean values; naar George Boole, 1815-1864, Engeland).
We kunnen gemakkelijk nagaan, dat
(1)    f(x) = 1 als -0,05 < x < 0,05
(2)    f(x) = 0 als x £ -0,05 of als x ³ 0,05
En dat is precies wat we wilden bereiken:
(1)   de functie f heeft als waarde 1 (true), als q = 0 (conform hetgeen we in dit geval in Cabri willen verstaan onder q = 0)
(2)   de functie f heeft als waarde 0 (false), als q ¹ 0.
Klik hier >Applet< voor een CabriJavapplet waarin deze functie (via een macro) gebruikt wordt.

3. Enkele Boole'se functies in Cabri terug
In deze paragraaf zullen we enkele functies behandelen, die betrekking hebben op de in paragraaf 1 bedoelde JA/NEE vragen.
Dit type functies noemen we Boole'se functies.

3.1. BEval0 terug

De in paragraaf 2 gebruikte functie geven we de naam BEval0 (boole's evalueren van de functievariabele op 0):
BEval0(x) = 1 als x = 0
BEval0(x) = 0 als x ¹ 0
waarbij we x in een 0.05-omgeving van 0 ook gelijk aan 0 noemen (Cabri-0?).
Het vastleggen van de macro verloopt via de volgende stappen:

1 - InvoerGetallen (typ een getal, bijvoorbeeld 0.04)
2 - Rekenmachine

boole4a.gif (2420 bytes)

Typ: 1-ceil( floor( 20*abs(

boole4b.gif (2822 bytes)

Typ vervolgens: ) ) / (1 + floor( 20*abs(

boole4c.gif (2670 bytes)

Typ tenslotte: ) )))

Voer de functie uit paragraaf 2 in als in bovenstaande figuren. Selecteer in plaats van a twee keer het getal 0.04.
Klik dan op het gelijk-teken en plaats de waarde (in dit geval 1.00) op het tekenblad.
3 - Definieer vervolgens de macro:BEval0 met:
Beginobjecten: het getal 0.04
Eindobjecten: het getal 1.00

Opmerking
Om de nauwkeurigheid op te voeren kan ook een waarde van bijvoorbeeld 10 000 000 (in plaats van 20) worden gebruikt.
[einde Opmerking]

3.2. NotBEval0 terug

De logische ontkenning van de functie BEval0 geven we aan met NotBEval0, zodat
NotBEval0(x) = 0 als x = 0
NotBEval0(x) = 1 als x ¹ 0
De definierende Cabri-functie hierbij is: ceil( floor( 20*abs(x) ) / (1 + floor( abs(x) )))

3.3. NOT(boolean) terug

De gebruikelijke logische (Boole'se) ontkenning NOT kunnen we vastleggen via de Cabri-functie 1 - x, zodat
NOT(1) = 0
NOT(0) = 1
N.B.
Deze functie werkt, aldus gedefinieerd, niet zoals we verwachten, als we als variabele een getal kiezen dat ongelijk is aan 0 en ongelijk aan 1.
Door de functie 1 - ABS(sign(x)) in de definitie te gebruiken komen we wat dichter bij wat gebruikelijk is.

boole6.gif (4891 bytes) Klik hier >Animatie< voor een CabriJavapplet met een toepassing van de functie NOT(boolean).
In deze applet wordt ook gebruik gemaakt van de functie 1/x, waarbij voor x = 0 (met Cabri-waarde "bestaat niet") en voor x = 1 (met waarde 1) een Boole's punt wordt geconstrueerd (zie verder ook de paragraaf Download).

Met dank aan collega Valentijn Van Hootegem (Vlaanderen).

Zie verder ook de pagina "Schuifbalk"

3.4. BAND en BOR terug

Het kan in voorkomende gevallen handig zijn ook logische functies tot onze beschikking te hebben die twee reële waarden Boole's evalueren op 0, waarbij dan de uitkomst wordt bepaald door het logische AND of het logische OR van de Boole'se uitkomsten:
AND(1,1) = 1; en in andere gevallen 0
OR(0,0) = 0; en in andere gevallen 1
De functies BAND en BOR kunnen nu worden vastgelegd met
BAND(x,y) =  BEval0(x) * BEval0(y)
BOR(x,y) = SIGN( BEval0(x) + BEval0(y) )

Klik hier >Applet< voor een CabriJavapplet die de bovenstaande functies illustreert.

4. Vergelijken van twee getalwaarden terug
Willen we weten of een getal kleiner dan of gelijk aan een tweede getal is (bijvoorbeeld bij lengtes van twee lijnstukken), dan kunnen we dat eveneens met een Boole'se functie afhandelen.
We stellen hierbij de nauwkeurigheid weer 0.05 (wellicht dat een kleinere waarde beter zou zijn, maar dan kunnen we de macro:BEval0 niet gebruiken).

4.1. BKleinerGelijk terug

We bekijken eerst de functie f(x) = ABS(x) + x
Voor x £ 0 geldt: f(x) = 0.
Voor x > 0 geldt: f(x) = 2x.
We hebben voor x = a - b een eenvoudig kriterium om uit te maken of a £ b. We kunnen immers gebruik maken van de functie BEval0.
Met de volgende stappen leggen we de macro vast.
1 - InvoerGetallen (typ bijvoorbeeld 5 en 12)
2 - Rekenmachine
Voer in het invoer-venster de functie ABS(a-b) + (a-b) in; zie onderstaande figuur, waarin a = 5 en b= 12.

figuur 4.1a figuur 4.1b
boole5a.gif (2537 bytes) boole5b.gif (2027 bytes)

En zet het Resultaat op het tekenblad (zie figuur 4.1a)
3 - macro:BEval0(2) ...... "2" betekent hier dat het resultaat van Stap 2 moet worden geselecteerd.
De waarde van BEval0 is dan (als het goed is) gelijk aan 1 (zie figuur 4.1b).
4 - We definieren de macro:BKleinerGelijk nu met:
Beginobjecten: de getallen 5 en 12 (in deze volgorde; zie Stap 1)
Eindobjecten: de Boole'se waarde 1.

4.2. BGroterGelijk terug

De macro:BGroterGelijk kunnen we op dezelfde manier als in 4.1 vastleggen.
We moeten dan de getallen (5 en 12) voor de berekening van het eerste resultaat via de functie ABS(a-b) + (a-b) in omgekeerde volgorde selecteren: eerst a = 12 en dan b = 5 (in Stap 2).
Bij Beginobjecten selecteren we dan weer in de volgorde 5, 12 (in Stap 4).

Klik hier >Applet< voor een CabriJavapplet die de functies uit paragraaf 4 illustreert.

5. Download terug
De in de applets gebruikte Cabri-figuren kunnen in één bestand via deze website worden gedownload.
In dat bestand zijn ook enkele andere figuren opgenomen, alsmede de hierboven behandelde macro's. Alle macro's kunnen ook worden geladen via het opgenomen Cabri menubestand Boolean.Men; hierin staan ook twee (hierboven) niet behandelde macro's: BPunt.Mac en PuntBWaarde.Mac.
Ook zijn in het bestand enkele voorbeelden opgenomen voor het testen van eigenschappen van figuren (parallellogram, gelijkzijdige driehoek).
Bij deze laatste is de nauwkeurigheid eveneens 0.05 (een waarde die eigenlijk te klein is).

Klik hier >Applet< voor een CabriJavapplet met een toepassing van macro:BPunt en macro:PuntBWaarde.

Klik hier om het downloadproces te starten (ZIP-bestand, ca. 30kB).


Met dank aan Jean-Charles Monrocq (Collège Louise Michel, Manville-sur-Risle, Frankrijk)

terug
[boole.htm] laatste wijziging op: