|  |  | Définition d'objets d'une figure |

#### Définition d'objets d'une figure

Un objet peut être défini par l'intermédiaire de différentes syntaxes :

- `(soit Point "p1" type args)`

  Le point est créé et sa référence est sauvée dans la variable `p1`. Cette syntaxe utilise une macro Scheme.

- `(Point "Nom" type args)`

  Le point est créé mais aucune référence du point n'est conservée.

- `(define p1 (Point "Nom" type args))`

  Le point est créé et sa référence est sauvée dans la variable `p1`.

- `(set! p1 (Point "Nom" type args))`

  Le point est créé et sa référence est copiée dans la variable préexistante `p1`.

Si des objets sont créés depuis le corps d'une fonction, utiliser soit la forme `set!` ou la forme spéciale Scheme `let`. Il est important de remarquer que l'appel de base est celui d'une fonction retournant une référence de l'objet créé.

Pour en savoir plus sur la correspondance entre les noms de commande Scheme en français et en anglais, voir le fichier `/usr/share/drgeo/scm/drgeo_scm_interface_constant_fr.scm`.

##### Point

`prototype (Point nom libre x y)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`x`: L'abscisse du point
`y`: L'ordonnée du point
Retourne: Référence d'un point libre du plan de coordonnées initiales `x` et `y`.
Exemple:
`(define p1 (Point "A" libre 1.2 (acos -1)))`

`prototype (Point nom sur-ligne ligne x)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`ligne`: Référence d'une ligne (droite, demi-droite, segment, etc.)
`x`: Abscisse curviligne du point libre, la valeur appartient à l'intervalle [0 ; 1]
Retourne: Référence d'un point libre sur une ligne.
Exemple:
`(Point "M" sur-ligne s1 0.5)`

`prototype (Point nom milieu-2pts p1 p2)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`p1`: Référence d'un point
`p2`: Référence d'un point
Retourne: Référence du milieu des deux points.
Exemple:
`(soit Point "A" libre 1 1)
(soit Point "B" libre 4 4)
(Point "I" milieu-2pts A B)`

`prototype (Point nom milieu-segment s)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`s`: Référence d'un segment
Retourne: Référence du milieu du segment.
Exemple:
`(Point "L" milieu-segment s)`

`prototype (Point nom intersection l1 l2)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`l1`: Référence d'une ligne
`l2`: Référence d'une ligne
Retourne: Référence du point d'intersection des deux lignes.
Exemple:
`(Point "I" intersection droite segment)`

`prototype (Point nom intersection2 l1 l2)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`l1`: Référence d'une ligne
`l2`: Référence d'une ligne
Retourne: Référence du 2ème point d'intersection des deux lignes lorsqu'une des deux est du type arc de cercle ou cercle.
Exemple:
`(Point "I" intersection2 droite cercle)`

##### Droite

`prototype (Droite nom 2points p1 p2)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`l1`: Référence d'un point
`l2`: Référence d'un point
Retourne: Référence d'une droite passant par deux points.
Exemple:
`(soit Point "A" libre 0 0)
(soit Point "M" libre 1 2)
(Droite "" 2points A M)`

`prototype (Droite nom parallèle p d)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`p`: Référence d'un point
`d`: Référence d'une direction (droite, segment, vecteur, ...)
Retourne: Référence d'une droite parallèle à la direction de `d` et passant par `p`.
Exemple:
`(soit Point "A" libre 1 5)
(soit Droite "d1" parallèle A d)`

`prototype (Droite nom perpendiculaire p d)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`p`: Référence d'un point
`d`: Référence d'une direction (droite, segment, vecteur, ...)
Retourne: Référence d'une droite perpendiculaire à la direction de `d` et passant par `p`.
Exemple:
`(soit Point "A" libre 1 5)
(soit Droite "d1" perpendiculaire A d)`

##### Demi-droite

`prototype (Demi-droite nom 2points o p)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`o`: Référence d'un point, origine de la demi-droite
`p`: Référence d'un point, point de la demi-droite
Retourne: Référence d'une demi-droite définie par son origine et un point.
Exemple:
`(soit Point "A" libre 1 5)
(soit Point "O" libre 0 0)
(soit Demi-droite "dd1" 2points A 0)`

##### Segment

`prototype (Segment nom extrémités p1 p2)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`p1`: Référence d'un point
`p2`: Référence d'un point
Retourne: Référence d'un segment défini par ses extrémités.
Exemple:
`(soit Point "A" libre 1 5)
(soit Point "B" libre 10 4)
(soit Segment "" extrémités A B)`

##### Cercle

`prototype (Cercle nom 2points c p)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`c`: Référence d'un point, centre du cercle
`p`: Référence d'un point sur le cercle
Retourne: Référence d'un cercle défini par son centre et un point.
Exemple:
`(soit Point "A" libre 1 5)
(soit Point "B" libre 10 4)
(soit Cercle "C1" 2points A B)`

`prototype (Cercle nom centre-rayon c r)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`c`: Référence d'un point, centre du cercle
`r`: Référence d'une valeur numérique, rayon du cercle
Retourne: Référence d'un cercle défini par son centre et son rayon.
Exemple:
`(soit Point "A" libre 1 5)
(soit Nombre "r" libre 10)
(soit Cercle "C1" centre-rayon A r)`

`prototype (Cercle nom centre-segment c s)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`c`: Référence d'un point, centre du cercle
`s`: Référence d'un segment dont la longueur est le rayon du cercle
Retourne: Référence d'un cercle défini par son centre et son rayon.
Exemple:
`(soit Point "A" libre 1 5)
(soit Cercle "C1" centre-rayon A s)`

##### Arc de cercle

`prototype (Arc-cercle nom 3points p1 p2 p3)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`p1`: Référence d'un point, 1ere extrémité de l'arc
`p2`: Référence d'un point de l'arc
`p3`: Référence d'un point, 2eme extrémité de l'arc
Retourne: Référence d'un arc de cercle défini par ses extrémités et un point.
Exemple:
`(soit Point "A" libre 1 5)
(soit Point "B" libre 0 5)
(soit Point "C" libre -1 -2)
(soit Arc-cercle "arc" 3points A B C)`

##### Polygone

`prototype (Polygone nom npoints args)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`args`: Une liste de références de points ; sommets du polygone
Retourne: Référence d'un polygone défini pas ses sommets.
Exemple:
`(soit Polygone "quad" npoints A B C D)`

##### Les transformations géométriques

Les prototypes des transformations géométriques permettent la construction des tranformés d'objets. Elles s'appliquent à des références d'objets de type point, segment, droite, demi-droite, vecteur, cercle, arc de cercle et polygone.

`prototype (TypeObjet nom rotation objet centre angle)`
`TypeObjet`: Point, Segment, Droite, Demi-droite, Vecteur, Cercle, Arc-cercle, Polygone
`nom`: Chaîne de caractères désignant le nom de l'objet
`objet`: Référence de l'objet à transformer
`centre`: Référence d'un point, centre de la rotation
`angle`: Référence d'une valeur, angle de la rotation
Retourne: Référence de l'objet transformé.
Exemple:
`(soit Point "I1" rotation I C a)`

`prototype (TypeObjet nom homothétie objet centre k)`
`TypeObjet`: Point, Segment, Droite, Demi-droite, Vecteur, Cercle, Arc-cercle, Polygone
`nom`: Chaîne de caractères désignant le nom de l'objet
`objet`: Référence de l'objet à transformer
`centre`: Référence d'un point, centre de l'homothétie
`k`: Référence d'une valeur, facteur de l'homothétie
Retourne: Référence de l'objet transformé.
Exemple:
`(soit Polygone "P1" homothétie P C k1)`

`prototype (TypeObjet nom symétrie objet centre)`
`TypeObjet`: Point, Segment, Droite, Demi-droite, Vecteur, Cercle, Arc-cercle, Polygone
`nom`: Chaîne de caractères désignant le nom de l'objet
`objet`: Référence de l'objet à transformer
`centre`: Référence d'un point, centre de la symétrie
Retourne: Référence de l'objet transformé.
Exemple:
`(soit Segment "S1" symétrie S C)`

`prototype (TypeObjet nom reflexion objet axe)`
`TypeObjet`: Point, Segment, Droite, Demi-droite, Vecteur, Cercle, Arc-cercle, Polygone
`nom`: Chaîne de caractères désignant le nom de l'objet
`objet`: Référence de l'objet à transformer
`axe`: Référence d'une droite, axe de la réflexion
Retourne: Référence de l'objet transformé.
Exemple:
`(soit Polygone "P1" reflexion P d1)`

`prototype (TypeObjet nom translation objet vecteur)`
`TypeObjet`: Point, Segment, Droite, Demi-droite, Vecteur, Cercle, Arc-cercle, Polygone
`nom`: Chaîne de caractères désignant le nom de l'objet
`objet`: Référence de l'objet à transformer
`vecteur`: Référence d'un vecteur
Retourne: Référence de l'objet transformé.
Exemple:
`(soit Cercle "C1" translation C v)`

##### Lieu géométrique

`prototype (Lieu nom 2points m c)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`m`: Référence d'un point mobile sur une ligne
`c`: Référence d'un point fixe dépendant du point `m`
Retourne: Référence d'un lieu.
Exemple:
`(Lieu "lieu1" 2points M I)`

##### Vecteur

`prototype (Vecteur nom 2points o e)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`o`: Référence d'un point, origine du vecteur
`e`: Référence d'un point, extrémité du vecteur
Retourne: Référence d'un vecteur.
Exemple:
`(soit Point "B" libre 0 5)
(soit Point "C" libre -1 -2)
(Vecteur "" 2points C B)`

##### Nombre

`prototype (Nombre nom libre x y v)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`x,y`: Les coordonnées de l'emplacement du nombre
`v`: La valeur initiale du nombre
Retourne: Référence d'un nombre libre.
Exemple:
`(soit Nombre "pi" libre 5 5 (acos -1))`

`prototype (Nombre nom longueur-segment x y s)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`x,y`: Les coordonnées de l'emplacement du nombre
`s`: Référence d'un segment
Retourne: Référence d'un nombre, longueur d'un segment.
Exemple:
`(soit Nombre "l" longueur-segment 5 5 S)`

`prototype (Nombre nom norme-vecteur x y v)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`x,y`: Les coordonnées de l'emplacement du nombre
`s`: Référence d'un vecteur
Retourne: Référence d'un nombre, norme d'un vecteur.
Exemple:
`(soit Nombre "l" norme-vecteur 5 5 V)`

`prototype (Nombre nom point-cercle x y p c)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`x,y`: Les coordonnées de l'emplacement du nombre
`p`: Référence d'un point
`c`: Référence d'un cercle
Retourne: Référence d'un nombre, distance entre le point et le cercle.
Exemple:
`(soit Nombre "l" point-cercle 5 5 P C)`

`prototype (Nombre nom point-droite x y p d)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`x,y`: Les coordonnées de l'emplacement du nombre
`p`: Référence d'un point
`c`: Référence d'une droite
Retourne: Référence d'un nombre, distance entre le point et la droite.
Exemple:
`(soit Nombre "d" point-droite 5 5 M D1)`

`prototype (Nombre nom point-point x y p1 p2)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`x,y`: Les coordonnées de l'emplacement du nombre
`p1`: Référence d'un point
`p2`: Référence d'un point
Retourne: Référence d'un nombre, distance entre les deux points.
Exemple:
`(soit Nombre "d" point-point 5 5 A B)`

`prototype (Nombre nom longueur-cercle x y c)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`x,y`: Les coordonnées du nombre
`c`: Référence d'un cercle
Retourne: Référence d'un nombre, longueur d'un cercle.
Exemple:
`(soit Nombre "p" longueur-cercle 5 5 C)`

`prototype (Nombre nom pente-droite x y d)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`x,y`: Les coordonnées du nombre
`d`: Référence d'une droite
Retourne: Référence d'un nombre, pente d'une droite.
Exemple:
`(soit Nombre "p" pente-droite 5 5 d1)`

`prototype (Nombre nom longueur-arc x y arc)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`x,y`: Les coordonnées du nombre
`arc`: Référence d'un arc de cercle
Retourne: Référence d'un nombre, longueur d'un arc de cercle.
Exemple:
`(soit Nombre "l" longueur-arc 5 5 ABC)`

##### Angle

`prototype (Angle nom géométrique A B C)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`A`: Référence d'un point
`B`: Référence d'un point, sommet de l'angle
`C`: Référence d'un point
Retourne: Référence d'un angle géométrique.
Exemple:
`(soit Angle "a" géométrique A B C)`

`prototype (Angle nom orienté x y v1 v2)`
`nom`: Chaîne de caractères désignant le nom de l'objet
`x,y`: Les coordonnées de l'emplacement de l'angle
`v1`: Référence d'un vecteur
`v2`: Référence d'un vecteur
Retourne: Référence d'un angle orienté formé par les deux vecteurs.
Exemple:
`(define v1 (Vecteur "" 2points A B))
(define v2 (Vecteur "" 2points A C))
(Angle "a" orienté 1 1 v1 v2)`

|  |  | Définition d'objets d'une figure |