GeoLicia

Divers

Un interpréteur de scripts est intégré à GeoLicia.

Les scripts permettent d'automatiser des constructions (macros) ou de faire des tests sur la figure (parallélisme, orthogonalité, ...)

La syntaxe est sensible à la casse. Les commandes sont en minuscules.

Voici quelques exemples.

Crée le milieu de deux points Construit le cercle passant par trois points Teste si un point est sur une droite
import GPoint

import GPoint

milieu de [#1#2]

export LAST

import GPoint|un point du cercle

import GPoint|un deuxième point du cercle

import GPoint|un troisième point du cercle

ifexists Point #1 & Point #2 & Point #3

{invisible} @10000= mediatrice de [#1#2]

{invisible} @10001= mediatrice de [#2#3]

@10002=intersection(0) de @10000 et de @10001

@10003= cercle de centre @10002 passant par #1

export @10000 @10001 @10002 @10003

endif

return

import GPoint

import GDroite

projection de #1 sur #2

iflikepoint LAST=#1

return true

endif

return false

Commandes :

1. Imports, exports d'objets.

return [chaine]

Termine le script en renvoyant l'argument optionnel chaine.

export obj1 obj2 obj3 ...

Exporte des objets créés et termine le script.

Les objets créés dans le scripts sont détruits à la fin de son exécution. Pour que les objets subsistent, il faut les exporter.

Il faut bien prendre garde lorsqu'on exporte un objet d'exporter aussi les objets qui le définissent (et dans le bon ordre).

Le nom des objets à exporter doit commencer par le caractère spécial @.

import <type>[|message]

Attend que l'utilisateur clique sur un objet du type souhaité. L'objet est alors nommé #1, #2, #3, ... selon l'ordre d'apparition de la commande import dans le script.

On peut éventuellement définir un message qui renseigne l'utilisateur sur la nature de l'objet à sélectionner

<type> peut être :

  • GPoint : pour un point
  • GDroite : pour une droite
  • GDemidroite : pour une demi-droite
  • GSegment : pour un segment
  • GCercle : pour un cercle

2. Les tests

Toutes les instructions de test suivent la syntaxe suivante :

if<instr> <condition>

(instruction si la condition est vérifiée)

endif

ifexists <type> nomobj

<instr>

endif

<instr> ne sera executé qui si des objets de type donné <type> portant les noms nomobj existent.

Cela permet d'éviter d'utiliser des objets qui n'ont pas été définis ou qui ont été détruits.

Les types pour <type> sont :

  • Point
  • Droite
  • Segment

On peut utiliser les opérateurs logiques & (et), | (ou) et ! (non) et des parenthèses.

Exemple :

ifexists Point A & Point B & Point C

if exists (Segment [AB] | Droite (AB)) & Point C & !(Point D)

iflikepoint p1=p2

<instr>

endif

Teste si les deux points p1 et p2 sont identiques, même s'ils ont été définis différemment.

Comme pour ifexists, on peut utiliser des opérateurs logiques.

iflike obj

<instr>

endif

Teste s'il existe un objet identique à obj qui doit être un point, une droite, un segment ou un cercle.

Comme pour ifexists, on peut utiliser des opérateurs logiques.

3. Création d'objets

Les objets sont créés temporairement, le temps de l'exécution du script. Il ne sont pas affichés à l'écran. Pour créer définitivement un objet, il faut utiliser la commande export.

Pour ne pas interférer avec des objets déjà créés, les objets nouvellement créés doivent avoir pour nom @10000, @10001, @10002, ... tous commençant par le caractère spécial @.

On peut aussi omettre le nom des objets dans leur définition. On y fait alors référence par l'indicateur spécial LAST pour le dernier objet créé ou LAST(1) pour l'avant dernier, LAST(2) pour l'antépénultième (avant-avant-dernier), etc...

Objets de base

Point nom(x,y) [sur obj]

Crée un point, éventuellement lié à un objet (droite, segment, cercle). Lorsque le point est lié à une droite, obj est le nom de la droite. Lorsque le point est lié à un segment, obj est du type [p1p2]. Dans le cas d'un cercle, cercle nom_du_cercle.

Les coordonnées peuvent être ajustées pour être sur l'objet.

Exemple :

Point A(50,100)

Point B(10,10) sur d

Point C(50,60) sur [AB]

Point D(60,70) sur cercle @10

nom=droite (p1p2)

Crée la droite passant par les points p1 et p2. La droite est nommée nom.

Exemple :

Point A(50,100)

Point B(10,10)

d= droite (AB)

nom=segment [p1p2]

Crée le segment d'extrémités les points p1 et p2.

Exemple :

Point A(50,100)

Point B(10,10)

@10000= segment[AB]

nom=demi-droite [p1p2)

Crée la demi-droite d'origine p1 et qui passe par p2.

Exemple :

Point A(50,100)

Point B(10,10)

@10000= demi-droite [AB)

nom= cercle de centre <c> passant par <p>

Crée un cercle.

Exemple :

@10000= cercle de centre A passant par B

nom= cercle de diametre [p1p2]

Crée un cercle de diamètre donné

Exemple :

@10000= cercle de diametre [AB]

Objets construits

nom= droite perpendiculaire a <d> passant par <p>

Exemple :

@10000= droite perpendiculaire a d passant par A

nom= droite parallele a <d> passant par <p>

Exemple :

@10000= droite parallele a d passant par A

nom= mediatrice de [p1p2]

Exemple :

@10000= mediatrice de [AB]

nom= bissectrice de p1p2p3

Exemple :

@10000= bissectrice de ABC

nom= milieu de [p1p2]

Exemple :

I= milieu de [AB]

nom= homothetie de <p> de centre <c> et de facteur <f>

Exemple :

@10000= homothetie de A de centre O et de facteur -0.25

nom= symetrie(<obj>) de <p>

Symétrie centrale ou axiale selon que obj est une droite ou un point.

Exemple :

@10000= symetrie(O) de A

@10001= symetrie(d) de A

nom= projection de <p> sur <d>

Projection orthogonale sur une droite. <d> peut être une droite, un segment ou une demi-droite. Dans tous les cas, on considère la projection sur la droite.

Exemple :

@10000= projection de A sur d

nom= translation de <p> de vecteur <p1p2>

Exemple :

C= translation de D de vecteur AB

nom= intersection(0|1) de obj1 et de obj2

Intersection entre deux objets. Lorsque plusieurs intersections sont possibles (avec des cercles), on les distingue en précisant 0 ou 1 entre les parenthèses.

Les objets peuvent être : droite, segment, demi-droite, cercle.

Exemple :

@10000= intersection(0) de d et de d'

@10001= cercle de centre A passant par B

@10002= intersection(0) de d et de @10001

@10003= intersection(1) de d et de @10002

Attributs

On peut faire précéder la définition d'un objet par des attributs, notés entre accolades.

  • {invisible}
  • {epais}
  • {plein}
  • {tiretlong}
  • {pointille}
  • {tiretpointille}
  • {tiretcourt}