|  |  | DGS a.d.h.v. voorbeelden

### DGS a.d.h.v. voorbeelden

Het instrument om een DGS te schrijven is bereikbaar via het numerieke onderdeel van het contextueel menu of van de gereedschapskist. Een DGS kan tussen de 0 en n invoerparameters te verwerken krijgen.

Nadat men het instrument gekozen heeft, volstaat het de in te voeren objecten aan te klikken en vervolgens ergens op de achtergrond van de figuur. Op die laatst aangeklikte positie zal het script geplaatst worden.

In wat volgt stellen wij voor op enkele DGS-voorbeelden te werken, zodat men er de kracht en functionaliteit makkelijker van kan inzien. Net als de macro-constructies, geven de DGS een speciale dimensie aan DR. GEO. Ze laten je toe - elk met een andere aanpak1 - paden te bewandelen die de auteurs van het programma niet bewandeld hebben of niet wensen te bewandelen.

Het is belangrijk bewust te zijn dat het leeuwendeel van de funtionaliteit van de GNU-Guile-interpreter aanspreekbaar is via de DGS. Dit is met name zo voor de functiebibliotheken2, die we uiteraard intens zullen gebruiken.

##### DGS zonder invoerparameters

Klik, na het instrument voor scripts te hebben gekozen, direct op de achtergrond van de figuur, op de plaats waar je het script wil zetten. Klik vooral op geen enkel object van de figuur. Zoniet, denkt DR. GEO dat je dit object als invoerparameter van het script aanklikt3. Als het script een plaats gekregen heeft, ziet u de tekens "Dr. Genius" verschijnen. Elk nieuw script bevat standaard het commando om die tekenreeks af te beelden, maar dit kan je uiteraard aanpassen met behulp van het instrument m.b.t. de eigenschappen van een object. Klik na de selectie van voornoemd instrument op het script - of preciezer : op zijn waarde - dat u wil bijstellen op de figuur. Een dialoogvenster met het script zal verschijnen. In de rest van dit deel, zullen we de scripts in dit dialoogvenster invoeren.

###### Een generator van willekeurige en andere getallen

Niets is eenvoudiger dan willekeurige getallen genereren. Voer volgende code in :

    (random 10)

Bij elke update van de figuur, zal het script een willekeurig geheel getal voortbrengen dat valt in het interval [0 ; 10[.

Wanneer u een reëel getal (float) wenst in het interval [0 ; 1[, maak dan gebruik van volgend script :

    (random:uniform)

(!) Enkele precizeringen :

- De uitkomst van het script is de waarde die op de laatste regel berekend werd. In dit voorbeeld, gaat het om een waarde die de uitkomst is van een functie waar we beroep op deden ;
- De laatste regel van het script moet een reëel getal als uitkomst hebben. Anders zal DR. GEOde boodschap "Niet af te drukken resultaat" weergeven ;
- Wanneer men de waarde van een veranderlijke wenst als uitkomst, volstaat het om de naam van de variabele op de laatste regel te plaatsen.

###### Veelgebruikte waarden berekenen

Om een benaderde waarde van pi te berekenen :

    (acos -1)

of van e :

    (exp 1)

De uitkomst van een DGS kan vervolgens gebruikt worden op dezelfde manier als alle andere getalswaarden die DR. GEO kan voortbrengen. Voor dit soort kleine zaken, zijn de DGS dus uw bondgenoten. Maar ze kunnen veel interessanter dingen wanneer je hen laat werken met invoerparameters.

##### DGS met minstens een invoerparameter

De procedure om een DGS met invoerparameter te creëren is bijna identiek. Het volstaat om, onmiddellijk na het instrument voor scripts te hebben geselecteerd, het object aan te klikken dat je als invoerparameter wenst te gebruiken. Klik vervolgens op de achtergrond van de figuur, op de plaats waar je het script zetten wil.

In het script wordt verwezen naar de invoerparameter met de veranderlijke a1. Hadden we twee invoerparameters gedefinieerd, dan zou de volgorde van selectie van die parameters weerspiegeld zijn in de naamgeving van de veranderlijken : a1 en a2. Hetzelfde gaat op voor 3, 4 of meer invoerparameters.

Naargelang het type object waarnaar men verwijst, zijn er verschillende methoden om de getalswaarde te bekomen, om de coördinaten te bekomen, etc. Het overzicht van de methoden kan men nalezen in het Deel Verwijzingsmethoden van de DGS.

In wat volgt, zullen we stapsgewijs de constructie uiteenzetten van een (deel van een) kromme en zijn tangens in een punt dat we zullen kunnen bewegen over dat deel van de kromme.

De eindfiguur wordt meegeleverd met DR. GEO. Zij heet slope.drgenius

De figuur die we zullen bekomen

###### Een waarde definiëren in een gegeven interval

Om te beginnen plaatsen we in een nieuwe figuur twee punten, en tekenen we het lijnstuk dat begrensd wordt door deze twee punten. Op dit lijnstuk plaatsen we een punt dat we "Move me!" noemen. Dit punt zal als ijkpunt fungeren ; de juiste afmetingen zal het script ons leveren. We creëren nu een script met als enige invoerparameter dit bewuste punt.

Als a1 verwijst naar het punt "Move me!", dan geeft het script dat volgt als uitkomst een reëel getal binnen het interval [-10 ; 10] :

    (define x (getAbscissa a1))
    (* 20  (- x 0.5))

Wat uitleg is nodig. In de eerste regel, laat de aanroep `(getAbscissa a1)` toe de abscis te bekomen van het object waarnaar a1 verwijst4 - namelijk het punt "Move me!". De waarden van deze abscis worden toegekend aan een nieuwe veranderlijke x. Op de tweede regel passen we vervolgens de schaal aan. Deze uitdrukking zou in algebraïsche notatie overeenstemmen met 20 ×( x - 0.5). Omdat dit de laatste regel is, is de uitkomst van het script de uitkomst van die regel en wordt die uitkomst afgebeeld in de figuur.

Laat ons dit script, tenslotte, Xo noemen.

###### Een representatief gedeelte van een kromme afbeelden

We zullen ons bedienen van de uitkomst van het eerste script om met een tweede script de ordinaat te berekenen in een punt onder de functie x -> cos(x) :

    (define x (getValue a1))
    (cos x)

De aanroep `(getValue a1)` laat toe de getalswaarde te bekomen van het object waarnaar we verwijzen met a1. Hier willen we de uitkomst van het vorige script gebruiken in een nieuw script. We zullen het Yo noemen.

In een volgende stap creëren we het punt Mo met coördinaten (Xo ; Yo). Het gaat om een willekeurig punt op de kromme x -> cos(x). Om een representatief gedeelte van de kromme af te beelden dat zich b.v. uitstrekt over het interval [-10 ; 10], creëren we de plaats van het punt Mo, wanneer het punt "Move Me!" het lijnstuk beschrijft. Zo, nu hebben we een kromme !

###### De raaklijn aan een kromme berekenen en afbeelden

Om de raaklijn in het punt Mo te tekenen, hebben we vooreerst de richtingscoëfficiënt in dat punt nodig, waarvoor we dus zowel de afgeleide functie x -> -sin(x) nodig hebben als Xo. We schrijven dus een script met als invoerparameter het script Xo :

    (- 0 (sin (getValue a1)))

De notatie met prefixen die Scheme/Guile gebruikt kan verwarrend werken, maar is een kwestie van gewoonte. Laat ons dit script "richtingscoëfficiënt in Mo" noemen. Op die manier zal, telkens wanneer Mo verplaatst wordt, de richtingscoëfficiënt opnieuw berekend worden.

Er rest ons nog de raaklijn te tekenen. Daartoe berekenen we eerst de coördinaten van een tweede punt - M1 - van deze rechte.

Laat ons beginnen met de abscis, b.v. X1 = Xo + 2. Om die te berekenen schrijven we een script met als invoerparameter het script Xo :

    (define x1 (getValue a1))
    (+ x1 2)

Dit script noemen we X1.

Nu nog de ordinaat van M1 te pakken krijgen. Hiervoor hebben we hetvolgende nodig :

- Mo (waarnaar we verwijzen met a1) ;
- de richtingscoëfficiënt in Mo (a2) ;
- de abscis van X1 (a3).

In dit script berekenen we de ordinaat van M1 op de volgende manier Yo + m ×(X1 - X0) :

    (define x0 (car (getCoordinates a1)))
    (define y0 (cadr (getCoordinates a1)))
    (define m (getValue a2))
    (define x1 (getValue a3))
    (+ (* m (- x1 x0)) y0)

Enkele woorden commentaar bij de aanroep `(getCoordinates a1)`. Bij deze aanroep moet a1 verwijzen naar een object van het type `punt'. Deze methode geeft als output een lijst met de coördinaten van het punt - hier Mo. Met `car` kan men het eerste element uit de lijst nemen, en met `cadr` het tweede. De rest van het script zou geen problemen mogen stellen.

Laat ons dit script Y1 noemen. Nu kunnen we het punt M1 construeren, met coördinaten (X1 ; Y1) en tenslotte de raaklijn (MoM1).

Het was natuurlijk mogelijk om maar twee of drie scripts te schrijven in plaats van deze panoplie. Maar we hopen dat u met deze kleine voorbeelden de smaak te pakken krijgt en zelf met DGS aan de slag gaat.

|  |  | DGS a.d.h.v. voorbeelden