Retour à la page personnelle de Bernard Parisse.

# Chapitre 1 Pour débuter en géométrie

Tapez `Alt+g` pour ouvrir un niveau de géométrie 2-d.
Tapez `Alt+h` pour ouvrir un niveau de géométrie 3-d.
Ou bien utilisez le menu `Geo``▸``New figure 2-d` (resp `Geo``▸``New figure 3-d`) pour ouvrir une fenêtre graphique 2-d (resp 3-d) avec sa barre de menus, ses lignes de commandes (à gauche de lécran graphique) et ses boutons (à droite de lécran graphique).
Les menus des commandes graphiques se trouvent dans le menu `Geo` ou dans le bandeau et si on a choisit `Voir Bandeau` dans le menu `Cfg``▸``Montrer``▸``Bandeau`. Chaque bouton du bandeau ouvre les sous menus et il faut cliquez sur `home` pour revenir au bandeau initial.

## 1.1 Réglage de la fenêtre

`Xcas` fait de la géométrie analytique : vous avez donc sous-jacent un système de coordonnées.
Cliquez sur le menu `Cfg` pour initialiser le graphique et changer la configuration des futurs graphiques.
On fait ainsi apparaitre le réglage des coordonnées :
`X-, Y-, Z-, X+, Y+, Z+` les coordonnées où sont faits les calculs,
`WX-, WY-, WX+, WY+` désignent les coordonnées de ce qui est visible,
`t-, t+` désigne les bornes du paramètre des tracés paramétriques ou polaires.
`x_rot, z_rot` permettent de changer la vue d’un dessin en 3-d.
Si vous voulez avoir un autre réglage au cours de votre travail, il faut régler alors la configuration avec le bouton `cfg` situé à droite de l’écran graphique. Si vous ne voulez pas voir les axes :
décocher `Montrer les axes` de la fenêtre du réglage des coordonnées, puis, validez votre choix par `OK` ou
taper `switch_axes(0)`.
En 3-d, utilisez aussi le menu `M->3-d` situé à droite de l’écran graphique qui vous permet d’avoir une :

    vue de face x=cst
    vue de cote y=cst
    vue de dessus z=cst

## 1.2 Comment imprimer un graphique 2-d

### 1.2.1 Pour avoir un fichier Latex : `graph2tex`

`graph2tex` a pour argument le nom d’un fichier.
`graph2tex` transforme le graphique en un fichier Latex de nom, le nom spécifié. Vous pouvez alors utiliser ce fichier de façon indépendante ou l’insérer dans un texte Latex. Dans ce cas il faudra enlever l’en tête :
`\documentclass{article}...\begin{document}`,
et enlever à la fin :
`\end{document}`
et de rajouter :
`\usepackage{pstricks}`
dans l’en-tête du fichier dans lequel on l’insère.

### 1.2.2 Avoir le graphique dans l’impression de l’historique : `graph2tex()`

`graph2tex()` lorsque `graph2tex` n’a pas d’argument cela a pour effet d’insérer dans l’historique ce qu’il faut, pour avoir le graphique dans l’impression de l’historique : vous pouvez voir ce que vous allez imprimer avec le menu `Fich` sous-menu `hist (Historique) imprimer` en choisisant :
`Pré-visualisation`.
Remarque Pour toutes les commandes qui commencent par `plot` on n’a pas besoin de la commande `graph2tex()`, le graphique est inséré automatiquement dans l’historique...si vous ne le voulez pas utiliser une commande synonyme ne commençant pas par `plot` !!!

### 1.2.3 En utilisant le menu `M` de `Xcas`

En utilisant dans le menu `M` du bloc des boutons situé à droite d’une sortie graphique :
`Exporter/Imprimer` vous pouvez sauver votre graphique en Latex, en postscript et en png.

## 1.3 Comment imprimer un graphique 3d

### 1.3.1 Pour avoir un fichier Latex : `graph3d2tex`

`graph3d2tex` a pour argument le nom d’un fichier.
`graph3d2tex` transforme le graphique 3-d en un fichier Latex de nom, le nom spécifié. Vous pouvez alors insérer ce fichier dans un texte Latex en ajoutant :
`\usepackage{pstricks}`
dans l’en-tête du fichier dans lequel on l’insère.

### 1.3.2 En utilisant les menus de `Xcas`

En utilisant dans le menu `M` du bloc des boutons situé à droite d’une sortie graphique :
`Exporter/Imprimer` vous pouvez sauver votre graphique en Latex, en postscript et en png.

## 1.4 Instructions élémentaires

### 1.4.1 La fenêtre graphique

On peut régler la fenêtre graphique avec la commande `xyztrange`, on écrira par exemple :
`xyztrange(-6.0,6.0,-7.0,4.0,-10.0,10.0,-1.0,6.0,
-5.0,5.0,-2.0,4.0,1,0.0,1.0)` pour avoir :
`X-=-6, X+=6` (valeurs des x calculés),
`Y-=-7, Y+=4` (valeurs des y calculés),
`Z-=-10, Z+=10`,
`t-=-1, t+=6` (valeurs du paramètre en paramétrique ou en polaire),
`WX-=-5, WX+=5`, (valeur des x visibles),
`WY-=-2, WY+=4` (valeurs des y visibles),
`1` pour voir les axes (ou `0` pour ne pas les voir),
`0.0` pour définir la valeur de `class_min` (pour faire des statistiques)
`1.0` pour définir la valeur de `class_size` (pour faire des statistiques).
La commande `xyztrange` a 15 paramètres, il est donc préférable lorsque on veut changer un paramètre ou régler la fenêtre graphique de le faire à l’aide du bouton `cfg`.

### 1.4.2 Les axes

Si vous voulez voir, (ou ne pas voir) les axes sans être obligé d’ouvrir la fenêtre d’initialisation graphique :
taper `switch_axes()`.
Pour faire réapparaitre les axes on fait la même chose :
`switch_axes()` dans la ligne de commande puis `Entrée`.
Dans un programme on utilisera la commande :
`switch_axes(0)` pour ne pas voir les axes et `switch_axes(1)` pour les voir.

### 1.4.3 Gestion de la fenêtre graphique

- `erase()` ou `erase` efface lécran graphique `DispG` et influe sur la commande `graph2tex` pour que seules les sorties graphiques faites aprés la commande `erase()` soient prises en compte par la commande `graph2tex`,
- `ClrGraph()` ou `ClrGraph` efface l’écran `DispG`,
- `couleur` permet de changer la couleur du graphique.
  `couleur` a un argument (une couleur) ou deux arguments (un objet géométrique et une couleur) :
  `noir` ou `0`,
  `rouge` ou `1`,
  `vert` ou `2`,
  `blanc` ou `3`,
  `bleu` ou `4`,
  `rose` ou `5`,
  `vert` ou `6` etc...
  Par exemple : `couleur(point(1+i),rouge)`
- `legende` permet de mettre une legende sur le graphique.
  `legende` a deux arguments un nombre complexe (ou un point) et une chaine de caractères.
  Par exemples :
  `legende(1+i,"le point 1+i")` ou
  `couleur(legende(1+i,"le point 1+i"),rouge)`

### 1.4.4 Un point

Pour obtenir un point il suffit de cliquer avec la souris (bouton gauche) pour qu’un point s’affiche avec un nom.
Ce nom est crée automatiquement : `A`, `B`, `C` puis `E` etc...
Attention Il ne sera pas créer de point `D` automatiquement car pour `Maple` `D` représente la fonction dérivée d’une fonction.
En dehors du mode `Maple` vous pouvez utiliser `D` comme nom de variable (par exemple `D:=point(1-i)`).
On peut aussi taper :
`M:=point((1,2))` ou `N:=point(1+3*i)` ou
`P:=point(1)` ou `O:=point(0)`.
cela dessine les points `M N P O` dans le repère défini dans la fenêtre d’initialisation graphique (bouton `cfg`).
Tous les points ainsi crées peuvent se déplacer ainsi que les constructions qui en dépendent. Pour cela on clique sur le point :
le nom du point se met dans la ligne de commande et le point change de couleur et devient bleu, sans relacher le bouton de la souris on déplace le point.

### 1.4.5 Un point sur un objet géomètrique

Pour dire que le point A doit se trouver sur l’objet géomètrique `G` on tape :
`A:=element(G)` ou bien
`A:=element(G,1)` ou bien
`A:=element(G,t)` où `t` est un paramètre qui représente le paramètrage de l’objet `G`.
Si on veut pouvoir faire bouger `t` à l’aide de la souris il faudra définir `t` avec la commande `element`.
Par exemple :

- l’objet géomètrique est un cercle
  On tape pour tracer le cercle de centre l’origine et de rayon `2` :
  `C:=cercle(0,2)`
  puis,
  `t:=element(0..2*pi)` pour faire apparaître en haut et à droite de l’écran un segment (ici [0,2*π]) muni d’un trait vertical (situé au début au milieu de l’intervalle) qui indique la valeur choisie comme `t`, trait que l’on peut faire bouger avec la souris pour modifier la valeur de `t`.
  `A:=element(C,t)` dessine le point `A` du cercle `C` tel que :
  t=angle(Ox,OA) au début `t=π` puisque `π` est le milieu de l’intervalle qui définit `t`.
  On peut alors faire varier `t` en bougeant le trait vertical avec la souris, et quand on bouge ce trait vertical, `A` se déplace sur le cercle `C`.
- l’objet géomètrique est une droite
  On tape pour tracer la droite `AB` :
  `A:=point(1); B:=point(3);D:=droite(A,B);`
  puis,
  `t:=element(-1..2)` pour faire apparaître en haut et à droite de l’écran un segment (ici [−1,2]) muni d’un trait vertical (situé au début au milieu de l’intervalle) qui indique la valeur choisie comme `t`, trait que l’on peut faire bouger avec la souris pour modifier la valeur de `t`.
  `M:=element(D,t)` dessine le point `M` de la droite `D` tel que :
  M−A=t*(B−A) soit `M:=(1-t)*A+t*B`.
  On peut alors faire varier `t` en bougeant le trait vertical avec la souris, et quand on bouge ce trait vertical, `M` se déplace sur le segment EF, défini par `E:=point(-1)` (t=−1) `F:=point(5)` (t=2)
- l’objet géomètrique est un segment
  On tape pour tracer pour tracer le segment `AB` :
  `A:=point(1); B:=point(3);S:=segment(A,B);`
  puis,
  `t:=element(0..1)` pour faire apparaître en haut et à droite de l’écran un segment (ici [−1,2]) muni d’un trait vertical (situé au début au milieu de l’intervalle) qui indique la valeur choisie comme `t`, trait que l’on peut faire bouger avec la souris pour modifier la valeur de `t`.
  Attention dans ce cas `M:=element(S,t)` dessine le point `M` du segment `S` avec `M` entre `A` et `B` tel que :
  M−A=t*(B−A) soit `M:=(1-t)*A+t*B`.
  On peut alors faire varier `t` en bougeant le trait vertical avec la souris, et quand on bouge ce trait vertical, `M` se déplace sur le segment AB et cela même si on a tapé `t:=element(-1..2)` car pour t<0 `M` restera en `A` et pour t>0 `M` restera en `B`.

### 1.4.6 Fonctions s’appliquant à un point

Dans ce qui suit on suppose que l’on a défini deux points `A` et `B` et que Ox et Oy désignent les axes du repère défini dans la fenêtre d’initialisation graphique.
`re(A)` désigne le point projection orthogonale de `A` sur Ox.
`im(A)` désigne le point projection orthogonale de `A` sur Oy.
`abscisse(A)` désigne l’abscisse de `A`.
`ordonnee(A)` désigne l’ordonnée de `A`.
`coordonnees(A)` désigne la liste des coordonnées de `A`.
`affixe(A)` désigne le nombre complexe qui est l’affixe de `A` dans ce repère.
`A`, la multiplication d’un nombre complexe λ=k*ei*θ par un point `A`, est un point qui se déduit de `A` par une similitude de rapport k et d’angle θ.
`B-A`, la différence de deux points, est un nombre complexe égal à la diffèrence des affixes de ces deux points (c’est l’affixe du vecteur AB).
`A+B`, la somme de deux points, est un nombre complexe égal à la somme des affixes de ces deux points (c’est l’affixe du point C tel que OACB soit un parallélogramme).
`C+A-B` où `A,B,C` sont des points, désigne le point transformé de `C` dans la translation de vecteur BA (`A-B` est un nombre complexe qui est l’affixe de BA).
`C+u` où `C` est un point et `u` est un nombre complexe, désigne le point transformé de `C` dans la translation de vecteur U d’affixe u.
Attention
si `C` a été défini comme `element(L)` cela définit la pojection orthogonale de ce translaté sur `L`.
Dans ce cas c’est `point(affixe(C)+A-B)` (resp `point(affixe(C)+u)`) qui est le translaté de `C` dans la translation de vecteur BA (resp U).
`longueur(A,B)` désigne la longueur du segment AB.
`longueur2(A,B)` désigne le carré de la longueur du segment AB.
`milieu(A,B)` désigne le point milieu du segment AB.
`isobarycentre(A,B,C)` désigne l’isobarycentre des points A,B,C c’est à dire le centre de gravité du triangle A,B,C.

### 1.4.7 Affixe d’un vecteur ou différence de 2 points

Un vecteur libre est défini par deux points (son représentant) et est entièrement défini par son affixe qui est le nombre complexe égal à la différence de ces deux points :
en effet la différence de deux points est un nombre complexe égal à la différence des affixes de ces deux points, et ce nombre complexe représente un vecteur d’origine O.
Exemples :
Si on a deux points `A` et `B` le vecteur AB sera désigné par le nombre complexe `B-A`.
`D:=C+A-B` : D est un point tel que ABCD est un parallélogramme puisque CD=BA (`D-C=A-B`).
`abs(B-A)` désigne la longueur du vecteur AB,
`inv(B-A)` désigne l’inverse du nombre complexe `B-A` : c’est donc l’affixe d’un vecteur paralléle à `conj(B-A)`,
`conj(B-A)` désigne le conjugué du nombre complexe `B-A` : c’est donc l’affixe d’un vecteur paralléle au symétrique-`Ox` de `B-A`.

### 1.4.8 Segment, demi-droite, droite

Pour dessiner un segment: on clique pour avoir un point et on déplace la souris en gardant le bouton gauche enfoncé, puis, on déplace la souris jusqu’au point désiré et on relâche le bouton de la souris. Là encore les objets crées sont nommés automatiquement (par exemple `A`, `B` pour les points et `AB` pour le segment reliant `A` et `B`).
On peut aussi utiliser les commandes :
`segment, droite, demi_droite` avec comme paramètres 2 points (ou une liste de 2 points) ou 2 nombres complexes (ou une liste de 2 nombres complexes) ou encore un point et un nombre complexe et vis et versa.
On peut donc écrire si on a auparavant défini deux points `A` et `B` :
`segment(A,B)` ou `segment(-1+2*i,1+i)` ou `segment([A,B])` pour définir un segment.
`droite(A,B)` ou `droite(-1+2*i,1+i)` ou `droite([A,B])` pour définir une droite.
`demi_droite(A,B)` ou `demi_droite(i,1-i)` ou `demi_droite([A,B])` pour définir une demi-droite d’origine `A` et contenant `B` (ou une demi-droite d’origine `point(-1+2*i)` et contenant `point(1+i)`).
Remarques
- Si on a défini un segment par deux points ou par des nombres complexes on a la possibilité de donner un nom á ses extrémités en rajoutant dans les arguments deux noms de variables.
On tape par exemple :
`segment(-1+2*i,1+i,K,L)` pour définir le point `K` d”affixe −1+2*i et le point `L` d”affixe 1+i ou encore
`segment(point(-1+i),1-i,M,N)` pour définir le point `M` d”affixe −1+i et le point `N` d”affixe 1−i.
- Si on a défini une demi_droite par deux points ou par des nombres complexes on a la possibilité de donner un nom á son extrémité en rajoutant dans les arguments un nom de variables.
On tape par exemple :
`demi_droite(-1+2*i,1+i,P)` pour définir le point `P` d”affixe −1+2*i.

### 1.4.9 Le vecteur en géométrie plane : `vecteur`

`vecteur`, en géométrie plane, a comme arguments soit :

- deux points A,B ou deux nombres complexes représentant l’affixe de ces points ou deux listes représentant les coordonnées de ces points.
  `vecteur` définit et dessine le vecteur AB
- un point A (ou un nombre complexe représentant l’affixe de ce point ou une liste représentant les coordonnées de ce point) et un vecteur V (définition récursive).
  `vecteur` définit et dessine le vecteur AB tel que AB=V.

On tape :

`vecteur(point(-1),point(i))`

Ou on tape :

`vecteur(-1,i)`

Ou on tape :

`vecteur([-1,0],[0,1])`

On obtient :

`Le tracé du vecteur d’origine -1 et d’extrémité i`

On tape :

`V:=vecteur(point(-1),point(i))`

On tape :

`vecteur(point(-1+i),V)`

Ou on tape :

`vecteur(-1+i,V)`

Ou on tape :

`vecteur([-1,1],V)`

On obtient :

`Le tracé du vecteur d’origine -1+i et d’extrémité 2*i`

Remarque
En calcul formel, on travaille sur la liste des coordonnées des vecteurs que l’on obtient avec la commande `coordonnees` (cf 1.4.6).

### 1.4.10 Exercice

Soient 3 points A, B, C d’affixe a, b, c. Montrer que le triangle ABC est équilatéral direct si et seulement si a+b*j+c*j2=0 où j=exp(2iπ/3).

#### La solution sans `Xcas`

On a j2=exp(4iπ/3) et −j2=exp(iπ/3) et 1+j+j2=0
ABC est équilatéral direct est équivalent à :
(c−a)=−j2(b−a) donc est équivalent à :
c−a(1+j2)+bj2=c+a*j+b*j2=0 ou encore après multiplication par j2 est équivalent à :
a+b*j+c*j2=0.

#### La solution avec `Xcas`

On tape dans un niveau de géométrie :

    supposons(b1=[1.3,-5,5,0.1]);
    supposons(b2=[2.3,-5,5,0.1]);
    b:=b1+(i)*b2;
    B:=point(b);
    supposons(c1=[-2.2,-5,5,0.1]);
    supposons(c2=[3.5,-5,5,0.1]);
    c:=c1+i*c2;
    C:=point(c);
    j:=exp(2*i*pi/3);
    a:=-b*j-c*j^2;
    A:=point(a);
    est_equilateral(A,B,C);
    normal((c-a)+j^2*(b-a));

La réponse pour `est_equilateral(A,B,C);` est `1` et
la réponse pour `normal((c-a)+j```^```2*(b-a));` est `0` et comme tout les calculs sont faits avec des paramètres formels cela vaut une démonstration. Pour la réciproque, on tape :

    supposons(b1=[1.3,-5,5,0.1]);
    supposons(b2=[2.3,-5,5,0.1]);
    b:=b1+(i)*b2;
    B:=point(b);
    supposons(c1=[-2.2,-5,5,0.1]);
    supposons(c2=[3.5,-5,5,0.1]);
    c:=c1+i*c2;
    C:=point(c);
    j:=exp(2*i*pi/3);
    triangle_equilateral(B,C,A);
    a:=affixe(A)
    normal(a+b*j+c*j^2);

la réponse pour `normal(a+b*j+c*j```^```2);` est `0` et comme tout les calculs sont faits avec des paramètres formels cela vaut une démonstration.

### 1.4.11 Un cercle

Un cercle se définit par deux paramètres :
- soit par les extémités de son diamètre (le deuxième paramètre doit être un point),
- soit par son centre et son rayon (le deuxième paramètre doit être un nombre complexe).
On peut aussi définir des arcs de cercle en rajoutant deux paramètres : les angles au centre des points qui définissent l’arc mesurés en radians ou en degrés selon le choix fait (cf `Cfg->Configuratioon du CAS`) et à partir de l’axe `Ox`.
Dans la suite on suppose que l’on a définit deux points `A` et `B` :

- Cercle de diamètre AB
  On tape :
  `cercle(A,B)` trace le cercle de diamètre AB et
  `cercle(point(i),point(1+2*i))` ou `cercle(i,point(1+2*i))` trace le cercle de diamètre défini par les points d’affixe i et 1+2*i.
- Cercle de centre A et de rayon r
  Remarque
  Si r est un nombre complexe le rayon est égal à `abs(r)`.
  On tape :
  `cercle(A,2.1)` trace le cercle de centre A et de rayon 2.1.
  `cercle(i,1+2*i)` trace le cercle de centre, le point d’affixe i, et de rayon, `abs(1+2*i)`=√5 c’est à dire le cercle passant par le point d’affixe 1+3*i (alors que `cercle(i,1.0+2.0*i)` trace le cercle de centre, le point d’affixe i, et de rayon, `abs(1.0+2.0*i)`=2.23607000000).
- Cercle de centre A et passant par B
  `cercle(A,B-A)` trace le cercle de centre `A` passant par `B`.
- Arc de cercle
  `cercle(A,B,pi/4,pi/2)` dessine (si on est en radians) un arc appartenant au cercle de diamètre AB et allant du point d’angle au centre π/4 au point d’angle au centre π/2 (ces angles sont mesurés à partir de l’axe AB).
  `cercle(A,2.1,pi/3,2*pi/3)` dessine (si on est en radians) un arc appartenant au cercle de centre A, de rayon 2.1 et allant du point d’angle au centre π/3 au point d’angle au centre 2*π/3 (ces angles sont mesurés à partir d’une parallèle à l’axe Ox passant par le centre du cercle).
  `cercle(A,B-A,pi/3,2*pi/3)` dessine (si on est en radians) un arc appartenant au cercle de centre A, passant par B, et allant du point d’angle au centre π/3 au point d’angle au centre 2*π/3 (ces angles sont mesurés à partir de l’axe AB).
  `arc(A,B,pi/3)` dessine (si on est en radians) l’arc `AB` d’angle au centre `pi/3` et appartenant au cercle de centre C=(a+b)/2+i*(b−a)/(2*tan(pi/6)).

Exemples
Pour définir un arc AB situé sur le cercle de diamètre CD, on tape :
`arccercle1(C,D,A,B):=`
`cercle(C,D,arg(A-milieu(C,D)),arg(B-milieu(C,D)));`
Pour définir un arc AB situé sur le cercle de centre C et de rayon r, on tape :
`arccercle2(C,r,A,B):=cercle(C,r,arg(A-C),arg(B-C));`

On se repotera à 1.10 pour les cercles inscrits, exinscrits et circonscrits à un triangle.

### 1.4.12 Fonctions s’appliquant à un cercle

On suppose que l’on a défini un cercle `C`.
`centre(C)` désigne le centre du cercle `C`.
`rayon(C)` désigne le réel égal au rayon du cercle `C`.

### 1.4.13 Avoir l’un des points d’intersection de deux objets géométriques : `inter_droite inter_unique`

L’un des points d’intersection de deux objets géométriques est obtenu par la commande `inter_droite` ou `inter_unique`.
On tape :
`inter_droite(droite(i,1),cercle(0,1))`
On obtient :
`Le point 1 est dessiné dans un écran graphique`
On tape :
`inter_droite(droite(i,1),droite(0,1+i))`
On obtient :
`Le point (1+i)/2 est dessiné dans un écran graphique`
Remarque
Lorsque l’intersection comporte plusieurs points `inter_unique` renvoie l’un de ces points. Mais on peut mettre un 3ième argument pour le spécifier qui est un point ou une liste de points :

- un point et alors `inter_unique` renverra le point d’intersection le plus proche de ce point,
- une liste de points et alors `inter_unique` renverra un point d’intersection qui ne se trouve pas dans cette liste.

### 1.4.14 Liste des points d’intersection de deux objets géométriques :`inter`

L’intersection de deux objets géométriques est une liste de points qui est obtenu par la commande `inter`.
Attention :
On utilise la commande `inter` pour des objets géométriques et la commande `intersect` pour des ensembles ou des listes.
Exemples :
Soient `D1,D2` deux droites concourantes et `C` un cercle qui coupe `D1`.
`E:=inter(D1,C)` désigne la liste des deux points d’intersection de `D1` et `C` : `E[0]` est le premier point de la liste et `E[1]` en est le second.
`inter(D1,D2)[0]` désigne le point d’intersection de `D1` et `D2`.
Soient `C1,C2` deux cercles concourants.
`inter(C1,C2)` désigne la liste des deux points d’intersection de `C1` et `C2` : ainsi `droite(inter(C1,C2))` désigne l’axe radical de `C1` et `C2`. On tape :
`inter(droite(i,1),cercle(0,1))`
On obtient :
`Les points i et 1 sont dessinés dans un écran graphique`
On tape :
`inter(droite(i,1),droite(0,1+i))[0]`
On obtient :
`Le point (1+i)/2 est dessiné dans un écran graphique`

## 1.5 Constructions élémentaires

### 1.5.1 Médiatrice d’un segment AB

Étant donné deux points `A` et `B` la commande :
`mediatrice(A,B)` trace la médiatrice du segment AB.
Activité
Créer un segment `AB`.
Construire la médiatrice de `AB`, en utilisant la même construction qu’avec un compas.
Réponse
On clique avec la souris pour avoir deux points `A` et `B` et le segment `AB`.
On tape :
`C1:=cercle(A,B-A)` trace le cercle de centre `A` passant par `B`.
`C2:=cercle(B,A-B)` trace le cercle de centre `B` passant par `A`.
`D:=droite(inter(C1,C2))` trace la droite joignant les deux points de l’intersection de `C1` et de `C2` (`inter(C1,C2)` est la liste des points de cette intersection).
La liste des instructions se trouve dans `geo1` : cliquer avec la souris pour avoir deux points `A` et `B` puis, faire `Ouvrir` du menu `Fich` de `Xcas` et sélectionner `geo1.xws`.
On peut aussi comme exercice de programmation définir la fonction `Mediatrice` (il faut commencer la fonction par une majuscule car `mediatrice` est une commande de `Xcas`).
On tape :
`Mediatrice(A,B):=droite(inter(cercle(A,longueur(A,B)),
cercle(B,longueur(A,B))))`

### 1.5.2 Milieu d’un segment [AB]

Étant donné deux points `A` et `B` la commande :
`M:=milieu(A,B)` trace le milieu `M` du segment [AB].
Activité
Créer un segment `[AB]`.
Construire le milieu de `AB`, soit en utilisant les coordonnées, soit en utilisant la même construction qu’avec un compas.
Réponse
On tape : `M:=point((coordonnees(A)+coordonnees(B))/2)` ou bien on rajoute à la construction de la médiatrice (cf ci-dessus) :
`M:=inter_unique(segment(A,B),D)`
(c’est la dernière commande de `geo1.xws`). On peut aussi comme exercice de programmation définir la fonction `Milieu` (il faut commencer la fonction par une majuscule car `milieu` est une commande de `Xcas`).
On tape :
`Milieu(A,B):=point((coordonnees(A)+coordonnees(B))/2)`
ou encore si on a défini la fonction `Mediatrice` :
`Milieu(A,B):=inter_unique(segment(A,B),Mediatrice(A,B))`

### 1.5.3 Le barycentre

`isobarycentre` définit l’isobarycentre de n points.
On tape par exemple :
`G:=isobarycentre(A,B,C,D,E)`
ou
`G:=isobarycentre([A,B,C,D,E])`
et `G` est l’isobarycentre des points `A,B,C,D,E`.
`barycentre` définit le barycentre de n listes formées d’un point et d’un coefficient.
On tape par exemple :
`K:=barycentre([A,2],[B,1],[C,-2],[D,3],[E,1])`
ou
`K:=barycentre([[A,2],[B,1],[C,-2],[D,3],[E,1]])`
et `K` est le barycentre des points `A,B,C,D,E` affectés des coefficients `2,1,-2,3,1`.
Activités
Créer 4 points `A,B,C,D`.
Définir l’isobarycentre de `A,B,C,D`, en utilisant les coordonnées.
Réponse
On tape :
`G:=point((coordonnees(A)+coordonnees(B)+coordonnees(C)+
coordonnees(D))/4)`
On peut, comme exercice de programmation définir la fonction `Isobarycentre` (il faut commencer la fonction par une majuscule car `isobarycentre` est une commande de `Xcas`).
On tape :
`Isobarycentre(L):={local d:=dim(L);sum(L[k],k,0,d-1)/d;}`
Créer 4 points `A,B,C,D`.
Définir le barycentre de `[A,1],[B,-2],[C,1],[D,3]`, en utilisant les coordonnées.
Réponse
On tape :
`G:=point((coordonnees(A)-2*coordonnees(B)+coordonnees(C)+
3*coordonnees(D))/3)`
On peut aussi comme exercice de programmation définir la fonction `Barycentre` (il faut commencer la fonction par une majuscule car `barycentre` est une commande de `Xcas`).
On tape :

    Barycentre(L):={
    local s,d:=dim(L);
      s:=sum(L[k],k,1,d-1,2);
      si (s==0) alors return "pas defini" fsi;
    retourne point(sum(L[k]*L[k+1],k,0,d-2,2)/s);
    }

### 1.5.4 Bissectrice d’un angle

Étant donné trois points `A`, `B` et `C` les commandes :
`bissectrice(A,B,C)` trace la bissectrice intérieure de l’angle A du triangle ABC.
`exbissectrice(A,B,C)` trace la bissectrice extérieure de l’angle A du triangle ABC.
Activité
Créer un triangle `ABC`.
Construire les bissectrices de l’angle A du triangle ABC, en utilisant la même construction qu’avec un compas et en utilisant l’instruction `mediatrice`.
Réponse
On clique avec la souris pour avoir un triangle `ABC`.
On tape :
`C1:=cercle(A,2)` trace un cercle de centre `A` et de rayon `2`.
`D:=inter(C1,droite(A,B))` définit l’intersection du cercle `C1` et de la droite AB.
`E:=inter(C1,droite(A,C))` définit l’intersection du cercle `C1` et de la droite AC.
`mediatrice(D[0],E[0])`
`mediatrice(D[1],E[0])`
On peut aussi comme exercice de programmation définir les fonctions `Bissectrice` et `Exbissectrice` (il faut commencer les noms des fonctions par une majuscule car `bissectrice` et `exbissectrice` sont des commandes de `Xcas`).
On tape si on a défini la fonction `Mediatrice` :
`Bissectrice(A,B,C):=Mediatrice(inter_unique(demi_droite(A,B),
cercle(A,2)),inter_unique(demi_droite(A,C),cercle(A,2)))`
`Exbissectrice(A,B,C):={local C1:=A+(A-C);Bissectrice(A,B,C1)}`

### 1.5.5 Report d’une longueur

Étant donnés trois points `A` `B` et `C`, on veut construire un point `D` pour que AD = BC.
On utilise la commande `cercle` et on tape :
`D:= element(cercle(A,B-C))`
L’instruction `longueur(B,C)` renvoie la longueur du segment BC (les unités étant définies par le choix de `WX-, WX+` et de `WY-, WY+`) effectué dans la fenêtre d’initialisation graphique.
Si l’on veut reporter une longueur dans une direction donnée, on multiplie cette longueur par le vecteur unitaire de cette direction.
Exemple :
Étant donnés trois points `A` `B` et `C`, construire sur la demi-droite AB, un point D tel que AD=AC.
On tape :
`D:=A+longueur(A,C)*(B-A)/longueur(A,B)`
ou encore
`D:=inter_unique(cercle(A,C-A),demi_droite(A,B))`

### 1.5.6 Report d’un angle

Étant donnés deux points `A` et `B`, on veut construire `C` pour que l’angle (AB,AC) soit de mesure donnée par exemple 72 degrés ou 2*π/5 radians.
On tape, si on a coché `radian` dans la fenêtre de configuration du `cas` :
`D:=rotation(A,2*pi/5,droite(A,B))`
ou, si on est en degré (on n’a pas coché `radian`) :
`D:=rotation(A,72,droite(A,B))`
puis on tape :
`C:=element(D)`
L’instruction `angle(A,B,C)` donne la mesure en radians (ou en degrés) de l’angle (AB,AC), on peut donc vérifier la construction demandée.
Étant donné deux points `A` et `B`, on veut construire `C` pour que l’angle (AB,AC) soit égal à l’angle (OM,OP).
On tape :
`D:=rotation(A,angle(O,M,P), droite(A,B));`
`C:=element(D)`

### 1.5.7 Perpendiculaire à la droite D passant par A

Étant donné trois points `A` `B` et `C`, on veut construire la perpendiculaire, passant par A, à la droite BC.
On tape :
`perpendiculaire(A,droite(B,C))` ou,
`hauteur(A,B,C)` (voir aussi 1.9) ou,
on utilise le nombre complexe `i` : `droite(A,A+i*(C-B))`.
Activité
Créer un point `A` et un segment `BC` ne passant pas par `A`.
Construire la perpendiculaire à la droite BC passant par A, en utilisant la même construction qu’avec un compas.
Réponse
On clique avec la souris pour avoir un point `A` et deux points `B` et `C` et le segment `BC`.
On tape :
`C1:=cercle(B,A-B)` trace le cercle de centre B passant par A
`C2:=cercle(C,A-C)` trace le cercle de centre C passant par A
`droite(inter(C1,C2))` trace la droite qui joint les points d’intersection des deux cercles précédents.
Activité
Créer un segment `AB`.
Construire la perpendiculaire à la droite AB passant par A en utilisant la même construction qu’avec un compas.
Réponse
On clique avec la souris pour avoir deux points `A` et `B` et le segment `AB`.
On tape :
`C3:=cercle(A,B-A)` trace le cercle de centre A passant par B
`mediatrice(inter(C3,droite(A,B)))` trace la mediatrice des deux points définit par `inter(C3,droite(A,B))`, cette médiatrice passe par A et est perpendiculaire à AB.
La liste des instructions se trouve dans `geo4` : créer deux points `A, B`, puis faire `Charger session` du menu `Fich` de `Xcas` et selectionner `geo4` du répértoire `examples/geo` pour exécuter ce fichier. On peut aussi comme exercice de programmation définir la fonction `Perpendiculaire` (il faut commencer le nom de la fonction par une majuscule car `perpendiculaire` est une commande de `Xcas`).
On tape (`A` est un point et `d` est une droite) :

    Perpendiculaire(A,d):={
    local E,M:=element(d);
    M:=Milieu(op(inter(d,cercle(A,E-A))));
    droite(A,M);}

### 1.5.8 Parallèle à une droite passant par A

Étant donné trois points `A` `B` et `C`, on veut construire la parallèle à la droite BC passant par A.
On tape :
`parallele(A,droite(B,C))`
Activité
Créer un point `A` et un segment `BC` ne passant pas par `A`. Construire la parallèle à la droite BC passant par A en utilisant l’instruction `perpendiculaire`.
Réponse
On clique avec la souris pour avoir un point `A` et deux points `B` et `C` et le segment `BC`.
On tape :
`D:=perpendiculaire(A,droite(B,C))`
cela trace la perpendiculaire à BC passant par A
`P:=perpendiculaire(A,D)`
cela trace la perpendiculaire à D passant par A.
La liste des instructions se trouve dans `geo5` : créer trois points `A, B, C`, puis faire `Charger session` du menu `Fich` de `Xcas` et selectionner `geo5` du répértoire `examples/geo` pour exécuter ce fichier.
On peut, comme exercice de programmation définir la fonction `Parallele` (il faut commencer la fonction par une majuscule car `parallele` est une commande de `Xcas`).
On tape (`A` est un point et `d` est une droite) :

    Parallele(A,d):={
    local d1:=Perpendiculaire(A,d);
    Perpendiculaire(A,d1);
    }

### 1.5.9 Parallèles à une droite situées à une distance d de cette droite

Activité
Créer un point `A` et un segment `BC` ne passant pas par `A`.
Puis créer un point `D` pour définir d=`longueur(A,D)`.
Construire les parallèles à la droite BC situées à une distance d=`longueur(A,D)` de BC.
Réponse
On clique avec la souris pour avoir un point `A` et deux points `B` et `C` et le segment `BC`, puis on clique avec la souris pour avoir un point `D` (d=longueur(A,D)).
On tape :
`D1:=perpendiculaire(B,droite(B,C));`
`C1:=cercle(B,longueur(A,D));`
`I:=inter(D1,C1);`
`E:=I[0];`
`F:=I[1];`
ou on utilise les nombres complexes pour définir `E` et `F` :
`E:=B+i*(C-B)*longueur(A,D)/longueur(B,C)` le point `E` est à une distance d=longueur(A,D) de la droite BC,
`F:=B-i*(C-B)*longueur(A,D)/longueur(B,C)` le point `F` est à une distance d=longueur(A,D) de la droite BC (`E` et `F` sont symètriques par rapport à BC),
puis,
`parallele(E,droite(B,C))` trace une parallèle à la droite BC situées à une distance d=longueur(A,D) de BC.
`parallele(F,droite(B,C))` trace l’autre parallèle à la droite BC situées à une distance d=longueur(A,D) de BC.
La liste des instructions se trouve dans `geo6` : créer trois points `A, B, C`, puis faire `Charger session` du menu `Fich` de `Xcas` et selectionner `geo6` du répértoire `examples/geo` pour exécuter ce fichier.

### 1.5.10 Tangentes à un cercle

Étant donné un point `A` et un cercle `C`, la commande :
`tangent(C,A)` dessine les deux tangentes à `C` passant par `A` si le point `A` est extérieur au cercle.
Si le point `A` est extérieur au cercle, `tangent(C,A)` est une liste de deux droites (les deux tangentes à `C` passant par `A`) et
si le point `A` est sur le cercle `tangent(C,A)` est une droite (la tangente à `C` passant par `A`).
Activité
Tracer les tangentes à un cercle passant par un point.
Cette activité doit se faire sans utiliser la commande `tangent`.
Créer deux points `A` et `B`.
Créer un cercle `C1` de centre `A` et passant par `B`.
Construire la tangente au cercle `C1` passant par `B`.
Créer un point `C` extérieur au cercle `C1` et construire les tangentes au cercle `C1` passant par `C`.
Réponse
On clique avec la souris pour avoir trois points `A`, `B` et `C` puis on exécute la liste des instructions qui se trouve dans `geo7` (faire `Charger session` du menu `Fich` de `Xcas` et selectionner `geo7` du répértoire `examples/geo` pour exécuter ce fichier).
Voici le détail de `geo7` :
`C1:=cercle(A,B-A)` (C1 est le cercle de centre A qui passe par B),
`perpendiculaire(B,droite(A,B))` (on dessine la tangente à C1 au point B),
`C2:=cercle(C,A)` (C2 est le cercle de diamètre AC),
`E:=inter(C1,C2)` (E désigne les 2 points d’intersection de C1 et de C2),
`droite(E[0],C)` (c’est une tangente à C1 passant par C),
`droite(E[1],C)` c’est l’autre tangente à C1 passant par C,
Activité
Tracer un cercle tangent à une droite donnée en un point donné et passant par un autre point.
Créer trois points `A`, `B` et `C`.
Tracer la droite `D` passant par `A` et `B`.
Construire un cercle `C1` passant par `C` et tangent à `D` en `A`.
Réponse
On clique avec la souris pour avoir trois points `A`, `B` et `C` puis on exécute la liste des instructions qui se trouve dans `geo8` (faire `Charger session` du menu `Fich` de `Xcas` et selectionner `geo8` du répértoire `examples/geo` pour exécuter ce fichier).
Voici le détail de `geo8` :
`D:=droite(A,B)` (trace la droite D passant par A et B),
`P:=perpendiculaire(A,D)` (trace la perpendiculaire à D passant par A),
`M:=mediatrice(A,C)` (trace la médiatrice de AC),
`N:=inter(P,M)[0]` (N est le point d’intersection des deux droites précédentes),
`C1:=cercle(N,A-N)` (trace le cercle de centre N passant par A).
`C1` repond à la question.

### 1.5.11 Tangentes communes à 2 cercles

Soient `C1:=cercle(A,r1)` et `C2:=cercle(B,r2)`. Supposons `r1!=r2` alors :

- si `longueur(A,B)<|r2-r1|` il n’y a pas de tangente commune.
- si `longueur(A,B)=|r2-r1|` les 2 cercles sont tangents en `C` et il y a 1 tangente commune passant par `C` et perpendiculaire à `AB`.
- si `|r2-r1|<longueur(A,B)<r2+r1` il y a 2 tangentes communes extérieures qui se coupent en `C` (`CA/CB=r1/r2`).
- si `longueur(A,B)=r2+r1` les 2 cercles sont tangents en `D` et il y a 1 tangente commune passant par `D` et perpendiculaire à `AB` et 2 tangentes communes qui se coupent en `C` (`CA/CB=r1/r2` et `DA=r1, DB=r2`).
- si `r2+r1<longueur(A,B)` il y a 2 tangentes communes extérieures qui se coupent en `C` et 2 tangentes communes intérieures qui se coupent en `D` (`CA/CB=r1/r2` et `DA/DB=r1/r2` avec `D` entre `A` et `B`).

Si `r1=r2` et `A!=B` il y a 2, 3, 4 tangentes communes et si `r1=r2` et `A=B` une infinité de tangentes communes Voici le programme général :

    tangentes(A,r1,B,r2):={
    local C1,C2,C,D,p,L,t1,t2;
    C1:=cercle(A,r1);
    C2:=cercle(B,r2);
    si r1==0 alors
    return tangente(C2,A);
    fsi;
    si r2==0 alors
    return tangente(C1,B);
    fsi;
    si longueur2(A,B)<(r2-r1)^2 alors
    return [];
    fsi;
    si r1==r2 alors
    si A==B alors return [infinity]; fsi;
    p:=perpendiculaire(B,droite(A,B));
    L:=inter(C2,p);
    t1:=parallele(L[0],droite(A,B));
    t2:=parallele(L[1],droite(A,B));
    si longueur2(A,B)<(r2+r1)^2 alors
    return [t1,t2];
    sinon
    return concat([t1,t2],tangente(C1,milieu(A,B)));
    fsi;
    fsi;
    C:=division_point(A,B,r1/r2);
    si longueur2(A,B)<(r2+r1)^2 alors
    return tangente(C1,C);
    sinon
    D:=division_point(A,B,-r1/r2);
    return concat(tangente(C1,C),tangente(C1,D));
    fsi;
    }:;

Activité Tracer les tangentes extérieures communes à deux cercles sécants ou extérieurs avec une construction géométrique niveau 3ième sans utiliser la primitive `tangente`.
On suppose que si `C1:=cercle(A,r1)` et `C2:=cercle(B,r2)` alors :
`longueur(A,B)>=|r2-r1|`.

- Si les 2 cercles ont des rayons égaux, la solution est facile car les tangentes extérieures communes sont parallèles à la droite des centres et les points de contact sont sur les perpendiculaires à la droite des centres passant respectivement par les centres.
  On tape :

      A:=point([-3.5,0.5],affichage=4);
      c1:=cercle(A,4,affichage=4);
      B:=point([1.3,1.4],affichage=4);
      c2:=cercle(B,4,affichage=4);
      p:=perpendiculaire(B,droite(A,B),affichage=ligne_tiret_point);
      L:=inter(c2,p);
      t1:=parallele(L[0],droite(A,B),affichage=1);
      t2:=parallele(L[1],droite(A,B),affichage=1);

  On obtient :
- Si les 2 cercles ont des rayons différents, par exemple si :
  `C1:=cercle(A,r1)` et `C2:=cercle(B,r2)` avec `r1<r2`.
  Si `K1` et `K2` sont les points de contact d’une tangente extérieure commune à `C1` et `C2`, le quadrilatère A,B,K2,K1 est un trapèze rectangle que l’on peut partager en un rectangle A,R,K2,K1 et un triangle rectangle A,B,R.
  Donc R se trouve sur le cercle de diamètre AB et sur le cercle de centre B et de rayon r2−r1.
  On tape :

      A:=point([-3.5,0.5],affichage=4);
      r1:=1.5;
      C1:=cercle(A,r1,affichage=4);
      B:=point([1.3,1.4],affichage=4);
      r2:=4;
      C2:=cercle(B,r2,affichage=4);
      C3:=cercle(B,r2-r1);
      C4:=cercle(A,B);
      L:=inter(C3,C4);
      T1:=inter_unique(demi_droite(B,L[0]),C2);
      T2:=inter_unique(demi_droite(B,L[1]),C2);
      t1:=parallele(T1,droite(A,L[0]),affichage=1);
      t2:=parallele(T2,droite(A,L[1]),affichage=1);
      segment(B,T1,affichage=ligne_tiret_point);
      segment(B,T2,affichage=ligne_tiret_point);
      segment(A,B);

  On obtient :
- Avec un programme :
  Si `C1:=cercle(A,r1)` et `C2:=cercle(B,r2)` alors on doit avoir :
  `longueur2(A,B)>=(r2-r1)```^```2`.
  On tape dans l’éditeur de programmes :

      tangente2c(A,r1,B,r2):={
      local C1,C2,C3,C4,L,T1,T2,t1,t2,r,C,p;
      si r1>r2 alors
      r:=r1;r1:=r2;r2:=r;
      C:=A;A:=B;B:=C;
      fsi;
      C1:=cercle(A,r1);
      C2:=cercle(B,r2);
      si longueur2(A,B)<(r2-r1)^2 alors
      return [C1,C2];
      fsi;
      si r1==r2 alors
      p:=perpendiculaire(B,droite(A,B));
      L:=inter(C2,p);
      t1:=parallele(L[0],droite(A,B),affichage=1);
      t2:=parallele(L[1],droite(A,B),affichage=1);
      return [C1,C2,t1,t2];
      fsi;
      C3:=cercle(B,r2-r1);
      C4:=cercle(A,B);
      L:=inter(C3,C4);
      T1:=inter_unique(demi_droite(B,L[0]),C2);
      T2:=inter_unique(demi_droite(B,L[1]),C2);
      t1:=parallele(T1,droite(A,L[0]),affichage=1);
      t2:=parallele(T2,droite(A,L[1]),affichage=1);
      return [C1,C2,t1,t2]
      }:;

Activité Tracer les tangentes intérieures communes à deux cercles extérieurs.
Si les 2 cercles sont extérieurs, par exemple si :
`C1:=cercle(A,r1)` et `C2:=cercle(B,r2)`, on doit avoir `AB>r1+r2`.
Si `K1` et `K2` sont les points de contact d’une tangente intérieure commune à `C1` et `C2`, la parallèle à K1K2 menée par A coupe BK2 en R. On a BR=r2+r1 et le triangle A,B,R est rectangle en R.
Donc R se trouve sur le cercle de diamètre AB et sur le cercle de centre B et de rayon r2−r1.

- On tape dans un niveau de géométrie 2D :

      A:=point([-3.5,0.5],affichage=4);
      r1:=1.5;
      C1:=cercle(A,r1,affichage=4);
      B:=point([3,2],affichage=4);
      r2:=4;
      C2:=cercle(B,r2,affichage=4);
      C3:=cercle(B,r2+r1);
      C4:=cercle(A,B);
      L:=inter(C3,C4);
      T1:=inter_unique(demi_droite(B,L[0]),C2);
      T2:=inter_unique(demi_droite(B,L[1]),C2);
      t1:=parallele(T1,droite(A,L[0]),affichage=1);
      t2:=parallele(T2,droite(A,L[1]),affichage=1);
      segment(B,L[0],affichage=ligne_tiret_point);
      segment(B,L[1],affichage=ligne_tiret_point);
      segment(A,B);

  On obtient :
- Avec un programme :
  Si `C1:=cercle(A,r1)` et `C2:=cercle(B,r2)` alors on doit avoir :
  `longueur2(A,B)>=(r2-r1)```^```2`.
  On tape dans l’éditeur de programmes :

      tangenti2c(A,r1,B,r2):={
      local C1,C2,C3,C4,L,T1,T2,t1,t2,r,C,p;
      si r1>r2 alors
      r:=r1;r1:=r2;r2:=r;
      C:=A;A:=B;B:=C;
      fsi;
      C1:=cercle(A,r1);
      C2:=cercle(B,r2);
      si longueur2(A,B)<(r2+r1)^2 alors
      return [C1,C2];
      fsi;
      si longueur2(A,B)<(r2+r1)^2 alors
      return [C1,C2];
      fsi;
      C3:=cercle(B,r2+r1);
      C4:=cercle(A,B);
      L:=inter(C3,C4);
      T1:=inter_unique(demi_droite(B,L[0]),C2);
      T2:=inter_unique(demi_droite(B,L[1]),C2);
      t1:=parallele(T1,droite(A,L[0]),affichage=1);
      t2:=parallele(T2,droite(A,L[1]),affichage=1);
      return [C1,C2,t1,t2]
      }:;

Voici le programme général :

    tangentei2c(A,r1,B,r2):={
    local C1,C2,C3,C4,C5,L,L1,T1,T2,T3,T4,t1,t2,t3,t4,r,C,p;
    si r1>r2 alors
    r:=r1;r1:=r2;r2:=r;
    C:=A;A:=B;B:=C;
    fsi;
    C1:=cercle(A,r1);
    C2:=cercle(B,r2);
    si longueur2(A,B)<(r2-r1)^2 alors
    return [C1,C2];
    fsi;
    C4:=cercle(A,B);
    si longueur2(A,B)>=(r2+r1)^2 alors
    C5:=cercle(B,r2+r1);
    L1:=inter(C5,C4);
    T3:=inter_unique(demi_droite(B,L1[0]),C2);
    T4:=inter_unique(demi_droite(B,L1[1]),C2);
    t3:=parallele(T3,droite(A,L1[0]),affichage=1);
    t4:=parallele(T4,droite(A,L1[1]),affichage=1);
    fsi;
    si r1==r2 alors
    si A==B alors return [C1,C2,infinity]; fsi;
    p:=perpendiculaire(B,droite(A,B));
    L:=inter(C2,p);
    t1:=parallele(L[0],droite(A,B),affichage=1);
    t2:=parallele(L[1],droite(A,B),affichage=1);
    si longueur2(A,B)<(r2+r1)^2 alors
    return [C1,C2,t1,t2];
    sinon return [C1,C2,t1,t2,t3,t4];
    fsi;
    fsi;
    C3:=cercle(B,r2-r1);
    L:=inter(C3,C4);
    T1:=inter_unique(demi_droite(B,L[0]),C2);
    T2:=inter_unique(demi_droite(B,L[1]),C2);
    t1:=parallele(T1,droite(A,L[0]),affichage=1);
    t2:=parallele(T2,droite(A,L[1]),affichage=1);
    si longueur2(A,B)<(r2+r1)^2 alors
    return [C1,C2,t1,t2]
    sinon return [C1,C2,t1,t2,t3,t4];
    fsi;

    return [C1,C2,t1,t2,t3,t4];
    }:;

On tape :
`tangentei2c(point(0,0),1,point(-4,0),2);`
On obtient :
On tape :
`tangentei2c(point(0,0),1,point(-3,0),2);`
On obtient :
On tape :
`tangentei2c(point(0,0),1,point(-2,0),2);`
On obtient :
On tape :
`tangentei2c(point(0,0),1,point(-1,0),2)`
On obtient :
On tape :
`tangentei2c(point(0,0),1,point(-0.5,0),2)`
On obtient :

## 1.6 Les transformations

Les transformations ci-dessous peuvent toujours être considérées, soit comme des fonctions (les arguments sont les paramètres servant à définir la transformation), soit comme agissant sur le dernier argument (les arguments sont les paramètres servant à définir la transformation et alorsl’objet géométrique à transformer est mis comme dernier paramètre).

### 1.6.1 La translation

Étant donné trois points `A, B, C` le point :
`translation(C-B,A)` est le transformé du point `A` dans la translation de vecteur `BC`.
On a aussi `t:=translation(C-B)` est la translation de vecteur `BC` .
On écrira alors `t(A)` pour désigner le transformé du point `A` dans la translation `t` de vecteur `BC`.
Par exemple si :
`D:=t(A)` ou si
`D:=translation(C-B,A)` on a :
`AD=BC`.
Activité
Créer un polygone quelconque `ABCDE`.
Créer un point `F` à l’extérieur de ce polygone.
Construire le polygone `FGHJK` translaté de `ABCDE` dans la translation de vecteur `AF`.
Faites bouger le point `A` et observer.
Faites bouger le point `F` et observer.

### 1.6.2 L’homothétie

Étant donné deux points `A, B` et un nombre réel k, le point :
`homothetie(B,k,A)` est le transformé du point `A` dans l’homothétie de centre `B` et de rapport k.
On a aussi `h:=homothetie(B,k)` est l’homothétie de centre `B` et de rapport k.
Par exemple si :
`C:=h(A)` ou si
`C:=homothetie(B,2,A)`, `C` est tel que `BC``=2*``BA`
Activité
Créer un polygone quelconque `ABCDE`.
Créer un point `F` à l’extérieur de ce polygone.
Construire le polygone `GHJKL` homothétique de `ABCDE` dans l’homothétie de vecteur centre `F` et de rapport 2.
Faites bouger le point `A` et observer.
Faites bouger le point `F` et observer.

### 1.6.3 La symétrie droite et la symétrie point

Étant donné trois points `A, B, C` le point :
`symetrie(droite(B,C),A)` est le transformé du point `A` dans la symétrie par rapport à la droite BC,
On a aussi `sd:=symetrie(droite(B,C))` est la symétrie par rapport à la droite BC,
`symetrie(B,A)` est le transformé du point `A` dans la symétrie de centre `B`.
On a aussi `sp:=symetrie(B)` est la symétrie de centre `B`. On peut aussi comme exercice de programmation définir les fonctions `Symetrie_point` `Symetrie_droite` (`symetrie` est la commande de `Xcas` qui réalise ces 2 fonctions).
On tape (`A` et `M` sont des points et `d` est une droite) :
`Symetrie_point((A,M)):=A+(A-M)`
`Symetrie_droite(d,M):= {local N:=inter_unique(Perpendiculaire(M,d),d);Symetrie_point(N,M);}`

### 1.6.4 La rotation

Étant donné deux points `A, B` et un réel u, le point :
`rotation(B,u,A)` est le transformé du point `A` dans la rotation de centre `B` et d’angle de mesure u radians (ou degrés selon la configuration du `CAS` menu `Cfg->Configuration du CAS`).
On a aussi `r:=rotation(B,u)` est la rotation de centre `B` et d’angle de mesure u radians (ou degrés selon la configuration du `cas` bouton rouge `cas`).

### 1.6.5 La projection

Étant donné trois points `A, B, C` le point :
`projection(droite(B,C),A)` est la projection orthogonale du point `A` sur la droite BC.
On a aussi `p:=projection(droite(B,C))` est la projection orthogonale sur la droite BC.

### 1.6.6 La similitude

Étant donné deux points `A, B`, un réel k et un réel u, le point :
`similitude(B,k,u,A)` est le transformé du point `A` dans la similitude de centre `B`, de rapport k et d’angle mesure u radians (ou degrés selon la configuration du `CAS` menu `Cfg->Configuration du CAS`).
On a aussi `s:=similitude(B,k,u)` est la similitude de centre `B`, de rapport k et d’angle mesure u radians (ou degrés selon la configuration du `CAS` menu `Cfg->Configuration du CAS`).

### 1.6.7 L’inversion

Étant donné deux points `A, B`, un réel k le point :
`inversion(C,k,A)` est le transformé du point `A` dans l’inversion de centre `C`, de rapport k.
Par exemple si :
`A1:=inversion(C,2,A)`, `A1` est tel que `CA1``*``CA``=2`.
`inversion(C,k,M)` est donc le point défini par:
`point(C+k*conj(inv(M-C)))`
On a aussi `inver:=inversion(C,k)` est l’inversion de centre `C`, de rapport k.

## 1.7 Les lieux géométriques

L’instruction `lieu` permet de tracer le lieu d’un point `M`, lorsque ce point `M` est fonction d’un point `P` pouvant se déplacer sur un objet géométrique `G` et si on a défini `P` par `P:=element(G)`).
Remarque :
Il faut que les paramètres de `lieu` soient des noms de variables.
Donc pour obtenir le lieu d’un point `M`, il faut avoir défini ce point par par une affectation à un nom de variable, par exemple `M:=...`.
On écrit alors :
`lieu(M,P)`
Exemple 1 :
Lieu du centre de gravité du triangle ABC quand A se déplace sur une parallèle à BC.
Ici on cherche le lieu du centre de gravité du triangle PBC lorsque P se déplace sur la parallèle à BC passant par A.
On clique pour obtenir trois points `A, B, C` et on tape :

    D:=parallele(A,droite(B,C));
    P:=element(D);
    G:=isobarycentre(P,B,C);
    lieu(G,P);

`lieu(G,P)` trace le lieu du point `G` en fonction de `P`.
Si l’on veut pouvoir animée la figure on tape la liste des instructions qui se trouve dans le fichier `lieu1`, on clique pour obtenir trois points `A, B, C` puis, on fait `Charger session` du menu `Fich` de `Xcas` et on selectionne `lieu1` du répértoire `examples/geo` pour exécuter ce fichier) :
Ou on clique pour créer trois points `A, B, C` et on tape :

    D:=parallele(A,droite(B,C));
    t:=element(-5..5)
    P:=element(D,t);
    G:=isobarycentre(P,B,C);
    lieu(G,P);

ainsi lorsqu’on déplace la barre verticale indiquant la valeur de `t`, on voit se déplacer les deux points `P` et `G` simultanément.
Exemples 2 et 3 :
Soient deux points `A` et `B` et `C1` le cercle de diamètre `A B`. Soit `O` le centre de ce cercle et `C` un point variable de ce cercle.
Soit `N` l’intersection de la tangente en `C` à `C1` avec la parallèle à `AC` passant par `O`.
Trouver le lieu de `N` quand `C` varie.
La liste des instructions pour trouver ce lieu se trouve dans le fichier `lieu2`, on clique pour obtenir deux points `A, B` puis, on fait `Charger session` du menu `Fich` de `Xcas` et on selectionne `lieu2` du répértoire `examples/geo` pour exécuter ce fichier.
Ou on clique pour créer deux points `A, B` et on tape :

    C1:=cercle(A,B);
    O:=milieu(A,B);
    C:=element(C1);
    T:=tangent(C1,C);
    D2:=parallele(O,droite(A,C));
    M:=inter(T,D2);
    N:=M[0];
    lieu(N,C);

Attention `M` est une liste ayant un seul élément et on ne peut pas écrire `lieu(M[0],C)` car `M[0]` n’est pas un nom de variable.
On peut aussi écrire des instructions sans utiliser la fonction `tangent` et en rajoutant `t:=element(0..2*pi);` (c’est le fichier `lieu3`) :
On clique pour créer deux points `A, B`.

    C1:=cercle(A,B);
    O:=milieu(A,B);
    t:=element(0..2*pi);
    C:=element(C1,t);
    D1:=perpendiculaire(C,droite(O,C));
    D2:=parallele(O,droite(A,C));
    M:=inter(D1,D2);
    N:=M[0];
    lieu(N,C);

Les triangles NOC et NOB sont égaux car leurs angles O sont égaux à l’angle CAB et à l’angle OCA. Donc NB est perpendiculaire à AB.
La réciproque est évidente car si `N` se trouve sur la perpendiculaire à `AB` en `B`, on méne par `N` l’autre tangente au cercle pour définir le point `C`.
Les triangles rectangles `NOC` et `NOB` sont égaux et donc `ON` est parallèle à `AC`.
Exemple 4 :
Une droite variable `D1` coupe les cotés `AB,AC,BC` du triangle `ABC` en `D,E,M`.
Les cercles circonscrits aux triangles `BDM` et `ECM` se coupent en `P` et `M`. Trouver le lieu de `P` quand `D1` varie.
On peut faire éxécuter le fichier `lieu4` (on clique pour obtenir trois points `A, B, C` puis on fait `Charger session` du menu `Fich` de `Xcas` et on selectionne `lieu4` du répértoire `examples/geo` pour exécuter ce fichier) ou,
on clique pour obtenir trois points `A, B, C` et on tape :

    Triangle(A,B,C);
    u:=element(-4..4);
    M:=element(droite(B,C),u);
    D:=element(droite(A,B));
    D1:=droite(D,M);
    E:=(inter(droite(A,C),D1))[0];
    C1:=circonscrit(B,D,M);
    C2:=circonscrit(E,C,M);
    L:=inter(C1,C2);
    if (affixe(L[0])==affixe(M)) {Q:=L[1];} else {Q:=L[0];};
    P:=Q;
    lieu(P,M);

On remarquera que l’on est obligé d’utiliser un point intermédiaire `Q` pour pouvoir définir `P` par une affectation.
Le lieu de P est le cercle circonscrit au triangle ABC car l’angle l’angle P du triangle PBC est égal à l’angle A du triangle ABC en écrivant des égalités d’angles inscrits.
Exemple 5 :
Lieu de l’orthocentre du triangle ABC quand A se déplace sur une parallèle à BC.
Ici on cherche le lieu de l’orthocentre du triangle MBC lorsque M se déplace sur la parallèle à BC passant par A.
On peut faire éxécuter le fichier `lieu5` (on clique pour obtenir trois points `A, B, C` puis, on fait `Charger session` du menu `Fich` de `Xcas` et on selectionner `lieu5` du répértoire `examples/geo` pour exécuter ce fichier) ou,
on clique pour obtenir trois points `A,B,C` et on tape :

    D:=parallele(A,droite(B,C));
    M:=element(D);
    H:=(inter(perpendiculaire(M,droite(C,B)),
              perpendiculaire(C,droite(M,B))))[0] ;
    lieu(H,M);

Le lieu est une parabole passant par B et C et de sommet S orthocentre du triangle isocèle PBC (P sur la médiatrice de BC et sur la droite D). On peut à la main avoir assez facilement l’équation de cette parabole ...mais trouver ce lieu en géométrie pure est plus difficle!

## 1.8 Figures polygonales

### 1.8.1 Le triangle

Étant donné trois points `A`, `B` et `C` les commandes suivantes permettent de tracer des triangles :

- Le triangle quelconque
  `triangle(A,B,C)` trace le triangle ABC.
- Le triangle équilatéral
  `triangle_equilateral(A,B)` trace le triangle équilatéral direct ABC mais sans définir le point C. Pour définir C, il faut donner un nom au triangle (par exemple T) et utiliser la commande `sommets(T)` qui renvoie la liste des sommets de T.
  On écrira alors :
  `T:=triangle_equilateral(A,B);C:= sommets(T)[2]`.
  Mais, pour définir C, il est plus facile d’utiliser :
  `triangle_equilateral(A,B,C)` qui trace le triangle équilatéral direct ABC en mettant dans la variable `C` le point C.
- Le triangle isocèle
  On suppose que c désigne la mesure en radians (ou en degrés) de l’angle (AB,AC).
  `triangle_isocele(A,B,c)` trace (sans définir le point C) le triangle isocèle ABC de sommet A, tel que l’angle (AB,AC)=c radians (ou degrés).
  `triangle_isocele(A,B,c,C)` trace le triangle isocèle ABC de sommet A, tel que l’angle (AB,AC)=c radians (ou degrés), en mettant dans la variable `C` le point C.
  On définit deux points A et B et on tape, par exemple, pour avoir un triangle rectangle isocéle ABC :
  `triangle_isocele(A,B,pi/2,C)`
  Activité
  Créer un segment `AB`.
  Construire un triangle isocèle `ABC` de sommet `A` (AB=AC) tel que l’angle A mesure 30∘=π/6 radians.
  Construire un triangle isocèle `ABD` de sommet `A` (AB=AD) tel que l’angle B mesure 30∘=π/6 radians.
  Réponse
  Supposons que l’on a choisi `radian` dans la fenêtre de configuration du `cas`.
  On clique avec la souris pour avoir le segment `AB` puis, on exécute la liste des instructions qui se trouve dans `geo9` (faire `Charger session` du menu `Fich` de `Xcas` et selectionner `geo9` du répértoire `examples/geo` pour exécuter ce fichier).
  Voici le détail de `geo9` :
  `C:=rotation(A,pi/6,B)` C est le transformé de B dans la rotation de centre A et d’angle π/6 radians,
  `D:=rotation(A,2*pi/3,B)` D est le transformé de B dans la rotation de centre A et d’angle 2*π/3 radians (car π−2*π/6=2*π/3).
- Le triangle rectangle
  `triangle_rectangle(A,B,k)` trace (sans définir le point C) le triangle ABC rectangle en A tel que longueur(A,C)=|k|*longueur(A,B) : ce triangle est direct si k>0 et indirect sinon.
  `triangle_rectangle(A,B,k,C)` trace le triangle ABC rectangle en A tel que longueur(A,C)=|k|*longueur(A,B), ce triangle est direct si k>0 et indirect sinon et met dans la variable `C` le point C.
  Si on suppose que c contient la mesure en radians (ou en degrés) de l’angle (BA,BC), on a :
  `triangle_rectangle(A,B,tan(c))` ou
  `triangle_rectangle(A,B,tan(c),C)` trace le triangle ABC rectangle en A tel que l’angle (BC,BA)=c radians (ou degrés).
  On remarquera que le troisième paramètre a pour valeur absolue AC/AB et que le triangle est direct si il est positif et indirect si il est négatif.
  Activité
  Créer un segment `AB` et un segment `CD` tels que les deux points `A` et `B` soient en dehors de la droite CD.
  Construire un point `E` sur la droite CD pour que le triangle `ABE` soit rectangle en `E` (Ê=90∘=π/2 radians).
  Réponse
  E se trouve sur le cercle de diamètre AB et sur la droite CD.
  On clique avec la souris pour avoir les segments `AB` et `CD` puis, on exécute la liste des instructions qui se trouve dans `geo10` (faire `Charger session` du menu `Fich` de `Xcas` et selectionner `geo10` du répértoire `examples/geo` pour exécuter ce fichier).
  Voici le détail de `geo10` :
  `E:=inter(droite(C,D),cercle(A,B))` est l’intersection de la droite CD avec le cercle de diamètre AB,
  `E1:=E[0]` est le premier point de cette intersection,
  `E2:=E[1]` est le deuxième point de cette intersection,
  `triangle(E1,A,B)` trace le triangle ABE1
  `triangle(E2,A,B)` trace le triangle ABE2
  Ces deux triangles répondent à la question.

### 1.8.2 Les quadrilatères

Les commandes suivantes permettent de tracer des quadrilatères :

- Le quadrilatère quelconque :
  On donne 4 points A,B,C,D et on construit le quadrilatère ABCD.
  On a :
  `quadrilatere(A,B,C,D)` trace le quadrilatère ABCD.
- Le carré :
  On donne 2 points A,B et on construit le carrè ABCD de sens direct. On a :
  `carré(A,B)` trace le carrè ABCD de sens direct, mais sans définir les points C et D.
  `carré(A,B,C,D)` trace le carrè ABCD de sens direct, et met dans `C` et `D` les points C et D.
- Le losange :
  On donne 2 points A,B et une mesure d’angle t et on construit le losange ABCD tel que (AB,AD)=t. On a :
  `losange(A,B,t)` trace le losange ABCD tel que :
  (AB,AD)=t, mais sans définir les points C et D.
  `losange(A,B,t,C,D)` trace le losange ABCD tel que :
  (AB,AD)=t, et met dans `C` et `D` les points C et D.
- Le rectangle :
  On donne 2 points A,B et un réel k et on construit le rectangle ABCD (direct si k>0 et indirect sinon) tel que AD=|k|*AB.
  On a :
  `rectangle(A,B,k)` trace (sans définir les points C et D) le rectangle ABCD tel que AD=|k|*AB. Ce rectangle est direct si k>0 et indirect sinon.
  `rectangle(A,B,k,C,D)` trace le rectangle ABCD tel que :
  AD=|k|*AB, et met dans `C` et `D` les points C et D. Ce rectangle est direct si k>0 et indirect sinon.
- Le parallélogramme :
  On donne 3 points A,B,C et on construit le e parallélogramme ABCD c’est à dire le point D tel que AD=BC.
  On a :
  `parallelogramme(A,B,C)` trace le parallélogramme ABCD.
  `parallelogramme(A,B,C,D)` trace le parallélogramme ABCD et met dans `D` le point D.

### 1.8.3 Les polygones

Soient n points (ou n nombres complexes représentant l’affixe de ces points).
`polygone` avec comme argument la liste ou la séquence de ces n points.
`polygone` renvoie et trace le polygone ayant pour sommets ces n points.
`polygone(0,1,1+i,i)` trace le carré de sommets 0,1,1+i,i.
`polygone(makelist(x->exp(i*pi*x/3),0,5,1))` trace l’hexagone de centre 0 et de sommets 1,ei*pi/3...e5*i*pi/3

### 1.8.4 Les sommets d’un polygone

Les commandes précédentes peuvent tracer des triangles ou des quadrilatères sans avoir tous les sommets, mais on peut avoir besoin des sommets de ces triangles ou de ces quadrilatères.
Si `T` est un triangle (ou un polygone) `sommets(T)` renvoie la liste circulaire des sommets de `T`, ainsi `sommets(T)[0]` et `sommets(T)[3]` désigne le premier sommet de `T` (attention aux indices!!!).
Exemple :
On clique pour avoir deux points `A` et `B`.
On tape :
`T:=triangle_equilateral(A,B)`
`C:=sommets(T)[2]`
Ainsi le triangle ABC est équilatéral.
On tape :
`Q:=carre(A,B)`
`E:=sommets(T)[2]`
`F:=sommets(T)[3]`
Ainsi, ABEF est un carré.

### 1.8.5 Activités : constructions de quadrilatères

- Le parallélogramme
  Activité
  Créer trois points `A, B, C`.
  Construire le quatrième sommet `D` du parallélogramme `ABCD` : on décrira trois méthodes de construction du point `D`.
  Réponse
  1/ D est tel que AD=BC.
  On tape :
  `D:=A+C-B` (ou encore `D:=translation(C-B,A)`)
  2/ AC et BD ont même milieu.
  On tape :
  `M:=milieu(A,C)`
  `D:=symetrie(M,B)`
  3/ AD est paralléle à BC et AB est paralléle à DC.
  On tape :
  `D1:=parallele(A,droite(B,C))`
  `D2:=parallele(C,droite(B,A))`
  `D:=inter(D1,D2)[0]`
  On peut ensuite vérifier avec la commande `parallelogramme`.
- Le carré
  Activité
  Créer un segment `AB`.
  Construire un carré de côté `AB` : on décrira deux méthodes de construction du carré et une méthode qui utilise les nombres complexes et un petit programme.
  Réponse
  1/ On obtient C et D par rotation.
  On tape :
  `C:=rotation(B,-π/2,A)`
  `D:=rotation(A,π/2,B)`
  (ou encore `C:=B-i*(A-B)` `D:=A+i*(B-A)`)
  Puis on trace le carré :
  `segment(A,B);segment(B,C);segment(C,D);segment(D,A);`
  2/ On obtient C par rotation et D par symétrie .
  On tape :
  `C:=rotation(B,-π/2,A)`
  `M:=milieu(A,C)`
  `D:=symetrie(M,B)`
  Puis on trace le carré :
  `segment(A,B);segment(B,C);segment(C,D);segment(D,A);`
  3/ On utilise les nombres complexes et on écrit le programme :

      carred(A,B):={
      local C,D;
      C:=B+i*(B-A);
      D:=A+i*(B-A);
      return ([segment(A,B),segment(B,C),
               segment(C,D),segment(D,A)]);
      };

  Attention
  Lorsque il y a des commandes graphiques intermédiaires, elles sont tracées dans l’écran `DispG`, mais seule la valeur de la fonction (ce qui suit `return`) est tracée.

On peut ensuite vérifier avec la commande `carre`.

### 1.8.6 Un exercice sur la droite des milieux

#### L’exercice

Soit un quadrilatère quelconque ABCD et M,N, P, Q les milieux respectifs de AB, BC, CD, DA.

- Quelle est la nature du quadrilatère MNPQ ?
- Trouver une condition nécessaire et suffisante pour que le quadrilatère MNPQ soit un losange.
- Trouver une condition nécessaire et suffisante pour que le quadrilatère MNPQ soit un rectangle.
- Trouver une condition nécessaire et suffisante pour que le quadrilatère MNPQ soit un carré.

#### La solution

Il est conseillé de faire une figure avec `Xcas` : on ouvre l’écran de géométrie et on clique sur 4 points `A, B, C, E` on modifie la ligne `E:=...` en `D:=...` puis on tape :

    M:=milieu(A,B);
    N:=milieu(C,B);
    P:=milieu(C,D);
    Q:=milieu(A,D);
    quadrilatere(A,B,C,D,couleur=rouge);
    segment(A,C,couleur=vert);
    segment(B,D,couleur=vert);
    quadrilatere(M,N,P,Q);

Puis on se met en mode `Pointer` et on déplace le point `D` avec la souris et on observe......
Cette session se trouve parmi les exemples sous le nom `milieu.xws`.

La démonstration :

- MN joint les milieux des côtés AB et BC du triangle ABC donc MN est parallèle à AC et MN=AC/2,
  de même PQ joint les milieux des côtés AD et DC du triangle ADC donc PQ est parallèle à AC et PQ=AC/2. Le quadrilatère MNPQ est donc un prallélogramme puisque ses côtés MN et PQ sont égaux et parallèles.
  Remarque
  On a aussi :
  MQ joint les milieux des côtés AB et AD du triangle DAB donc MQ est parallèle à BD et MQ=BD/2 et
  NP joint les milieux des côtés AB et AD du triangle DCB donc NP est parallèle à BD et NP=BD/2.
- Une condition nécessaire et suffisante pour que le prallélogramme MNPQ soit un losange est que MN=NP. D’aprés la remarque précédente l’égalité MN=NP est équivalente à BD=AC c’est à dire à l’égalité des diagonales du quadrilatère ABCD.
  Donc une condition nécessaire et suffisante pour que le quadrilatère MNPQ soit un losange est que les diagonales du quadrilatère ABCD soient égales.
- Une condition nécessaire et suffisante pour que le prallélogramme MNPQ soit un rectangle est que MN ⊥ NP. D’aprés la remarque précédente, MN est parallèle à AC et NP est parallèle à BD, donc MN ⊥ =NP est équivalente à BD ⊥ AC.
  Donc une condition nécessaire et suffisante pour que le quadrilatère MNPQ soit un losange est que les diagonales du quadrilatère ABCD soient perpendiculaires.
- Une condition nécessaire et suffisante pour que le prallélogramme MNPQ soit un carré est que MN=NP et MN ⊥ =NP. Donc une condition nécessaire et suffisante pour que le quadrilatère MNPQ soit un losange est que les diagonales du quadrilatère ABCD soient égales et perpendiculaires.

#### Vrai/Faux

- Si ABCD est un rectangle alors MNPQ est un losange
- Si MNPQ est un losange alors ABCD est un rectangle
- Si ABCD est un losange alors MNPQ est un rectangle
- Si MNPQ est un rectangle alors ABCD est un losange
- Si ABCD est un carré alors MNPQ est un carré
- Si MNPQ est un carré alors ABCD est un carré
- Pour que MNPQ soit un carré, il suffit que ABCD soit un carré
- Pour que MNPQ soit un carré, il faut que ABCD soit un carré
- Pour que MNPQ soit un losange, il suffit que ABCD soit un losange
- Pour que MNPQ soit un losange, il faut que ABCD soit un losange
- Pour que MNPQ soit un losange, il suffit que ABCD soit un rectangle
- Pour que MNPQ soit un losange, il faut que ABCD soit un rectangle
- Pour que MNPQ soit un rectangle, il suffit que ABCD soit un losange
- Pour que MNPQ soit un rectangle, il faut que ABCD soit un losange
- Pour que MNPQ soit un rectangle, il suffit que ABCD soit un rectangle
- Pour que MNPQ soit un rectangle, il faut que ABCD soit un rectangle

Répondre par vrai ou faux en donnant des exemples lorsque la proposition est fausse et une démonstration se référant à l’exercice lorsque la proposition est vraie.

### 1.8.7 Les polygones réguliers : `isopolygone`

`isopolygone` permet de tracer des polygones réguliers ayant k cotés.
Les arguments sont :
- soit deux sommets (deux points ou deux complexes) et le nombre de cotés (un entier positif k),
- soit le centre du polygone et un sommet (deux points ou deux complexes) et un entier négatif −k (si k le nombre de cotés),
Sans se servir de la commande `isopolygone` tracer :

- L’hexagone
  Activité
  1/ Créer un segment `AB`. Construire un hexagone régulier `ABCDEF`.
  2/ Créer un segment `AB`. Construire un hexagone régulier de sorte que `AB` soit un segment qui joint les milieux de deux cotés opposés de l’hexagone.
  3/ Créer un segment `AB`. Construire un hexagone régulier de sorte que `AB` soit un segment qui joint les milieux de deux cotés adjacents de l’hexagone.
  Réponse
  1/ On utilise les nombres complexes et le fait que les angles extérieurs d’un hexagone direct sont de 4π/3 radians.
  On peut donc écrire le programme qui trace l’hexagone régulier direct ABCDEF :

      hexagone(A,B):={
      local l,C;
      l:=[];
      for (j:=1;j<=6;j++){
      l:=append(l,segment(A,B));
      C:=B+(1+i*sqrt(3))*(B-A)/2;
      //ou C:=rotation(B,4*pi/3,A)
      A:=B;
      B:=C;
      }
      return(l);
      };

  Ainsi `hexagone(A,B)` et `hexagone(B,A)` répondent à la question.
  2/ On construit deux sommets consécutifs C et D symétriques par rapport à B et on utilise la fonction `hexagone` précédente.
  On tape :

      C:=similitude(B,1/2/sqrt(3),pi/2,A)
      D:=similitude(B,1/2/sqrt(3),-pi/2,A)
      hexagone(C,D)

  3/ C se déduit de A par similiude de centre B et D est le symëtrique de C par rapport à B puis on utilise la fonction `hexagone` précédente.
  On tape :

      C:=similitude(B,1/sqrt(3),pi/6,A)
      D:=symetrie(B,C)
      hexagone(C,D)

- Le N-gone
  On peut écrire le programme qui trace le N-gone direct AB... :

      Ngone(A,B,n):={
      local l,C;
      l:=[];
      for (j:=1;j<=n;j++){
      l:=append(l,segment(A,B));
      C:=rotation(B,(n+2)*pi/n,A)
      A:=B;
      B:=C;
      }
      return(l);
      };

## 1.9 Droites remarquables du triangle

Étant donné trois points `A`, `B` et `C` les commandes suivantes permettent de tracer les droites remarquables du triangle ABC :

- Les médianes
  `mediane(A,B,C)` trace la médiane du triangle ABC issue de A,
  `mediane(B,C,A)` trace la médiane du triangle ABC issue de B,
  `mediane(C,B,A)` trace la médiane du triangle ABC issue de C.
- Les bissectrices
  `bissectrice(A,B,C)` trace la bissectrice intérieure de l’angle A,
  `exbissectrice(A,B,C)` trace la bissectrice extérieure de l’angle A,
  `bissectrice(B,A,C)` trace la bissectrice intérieure de l’angle B,
  `exbissectrice(B,A,C)` trace la bissectrice extérieure de l’angle B,
  `bissectrice(C,B,A)` trace la bissectrice intérieure de l’angle C,
  `exbissectrice(C,B,A)` trace la bissectrice extérieure de l’angle C.
- Les hauteurs
  `hauteur(A,B,C)` trace la hauteur du triangle ABC issue de A,
  `hauteur(B,A,C)` trace la hauteur du triangle ABC issue de B,
  `hauteur(C,B,A)` trace la hauteur du triangle ABC issue de C.
- Les médiatrices
  `mediatrice(A,B)` trace la médiatrice de AB,
  `mediatrice(B,C)` trace la médiatrice de BC,
  `mediatrice(A,C)` trace la médiatrice de AC

## 1.10 Cercles remarquables du triangle

Étant donné trois points `A`, `B` et `C` les commandes suivantes permettent de tracer les cercles remarquables du triangle ABC :

- Le cercle circonscrit
  `circonscrit(A,B,C)` trace le cercle circonscrit au triangle ABC.
- Le cercle inscrit
  `inscrit(A,B,C)` trace le cercle inscrit au triangle ABC.
- Le cercle exinscrit
  `exinscrit(A,B,C)` trace le cercle exinscrit dans l’angle A du triangle ABC,
  `exinscrit(B,A,C)` trace le cercle exinscrit dans l’angle B du triangle ABC,
  `exinscrit(C,B,A)` trace le cercle exinscrit dans l’angle C du triangle ABC.

## 1.11 Les fonctions booléennes

- `est_element` pour savoir si un point appartient à un objet géométrique.
  `est_element` est une fonction booléenne ayant comme argument un point et un objet géométrique.
  `est_element` vaut 1 si le point appartient à l’objet géométrique, et vaut 0 sinon.
- `est_aligne` pour savoir si 3 points sont alignés.
  `est_aligne` est une fonction booléenne ayant comme argument trois points.
  `est_aligne` vaut 1 si les trois points sont alignés, et vaut 0 sinon.
- `est_cocyclique` pour savoir si 4 points sont cocycliques.
  `est_cocyclique` est une fonction booléenne ayant comme argument quatre points.
  `est_cocyclique` vaut 1 si les quatre points sont cocycliques, et 0 sinon.
- `est_parallele` pour savoir si 2 droites sont parallèles.
  `est_parallele` est une fonction booléenne ayant comme argument deux droites.
  `est_parallele` vaut 1 si les deux droites sont parallèles, et, vaut 0 sinon.
- `est_perpendiculaire` pour savoir si 2 droites sont perpendiculaires.
  `est_perpendiculaire` est une fonction booléenne ayant comme argument deux droites.
  `est_perpendiculaire` vaut 1 si les deux droites sont perpendiculaires, et, vaut 0 sinon.
- `est_orthogonal` pour savoir si 2 droites ou 2 cercles sont orthogonaux.
  `est_orthogonal` est une fonction booléenne ayant comme argument deux droites (resp deux cercles).
  `est_orthogonal` vaut 1 si les deux droites sont perpendiculaires (resp les deux cercles sont orthogonaux), et vaut 0 sinon.

## 1.12 La géométrie du cercle

### 1.12.1 Arc capable

`arc` permet de tracer un arc défini par deux points et la mesure de son angle au centre α (−2π ≤ α ≤ 2π) le signe de α donne le sens de parcours.
Pour avoir l’arc capable `AB` de mesure u il faut taper :
`arc(A,B,2*(-pi+u))` si π>u>0 ou
`arc(A,B,2*(pi+u))` si −π<u<0 .
Activité, sans se servir de la commade `arc`
Soient deux points A et B. Le lieu des points M d’où l’on voit un segment AB sous un angle u donné (u ≠ π+2*k*π et u ≠ 2*k*π) est un arc de cercle ou deux arcs de cercle selon que ; u=mesure(MA,MB) ou que u=mesure(AMB).
On tape :

    Arcaporient(A,B,u):={
    AB:=segment(A,B);
    O1:=inter(mediatrice(A,B),rotation(A,pi/2-u,droite(A,B)))[0];
    if (u>0) return(cercle(O1,A-O1,arg(B-O1),arg(B-O1)+2*(pi-u)));
    return(cercle(O1,A-O1,arg(B-O1),arg(B-O1)+2*(-pi-u)));
    };
    Arcap(A,B,u):={
    local L;
    AB:=segment(A,B);
    O1:=inter(mediatrice(A,B),rotation(A,pi/2-u,droite(A,B)))[0];
    O2:=inter(mediatrice(A,B),rotation(A,-pi/2+u,droite(A,B)))[0];
    L:=[cercle(O1,A-O1,arg(B-O1),arg(B-O1)+2*(pi-u))];
    L:=append(L,cercle(O2,A-O2,arg(A-O2),arg(A-O2)+2*(pi-u)));
    return(L);
    };

Exercice : La droite de Steiner
Soient un triangle quelconque ABC ,H son orthocentre et c son cercle circonscrit.

- Soit Ha le symétrique de H par rapport à BC.
  Montrer que Ha ∈ c.
- Soit I un point de c et Ia (resp Ib, Ic) le symétrique de I par rapport à (BC) (resp (AC), (AB)). Montrer que Ia, Ib, Ic et H sont alignés selon une droite appelée `la droite de Steiner de` `I`

- On montre que l’angle BHC=BHaC=π−BAC En effet soient M et N les pieds des haureurs issues de B et C : le quadrilatère AMHN est inscriptible donc : BHC=π−BAC
  Par symétrie on a BHC=BHaC Donc BHaC=π−BAC donc le quadrilatère AMHaN est inscriptible.
- On considère les cercles ca (resp cb,cc) les cercles symétriques de c par rapport à BC (resp AC, AB) et Hb (resp Hc les symétriques de H par rapport à AC (resp AB). Par des considérations d’angle on montre que l’angle IbHIc=π (resp IbHIa=π donc que H,Ia,Ib,Ic sont alignés

### 1.12.2 Puissance d’un point par rapport à un cercle

Si un point A est à une distance d du centre d’un cercle C de rayon r, la puissance de A par rapport au cercle C est égale à d2−r2. On tape :
`puissance(cercle(0,1+i),3+i)`
On obtient :
`8`
En effet : r=√2 et d=√10 donc d2−r2=8 On peut aussi faire écrire la fonction `puissancc` comme exercice de programmation.

    Puissancc(A,C):={
    local O,r,d2;
    O:=centre(C);
    r:=rayon(C);
    d2:=longueur2(A,O);
    return(d2-r^2);
    };

### 1.12.3 Axe radical de deux cercles

L’axe radical de deux cercles C1 et C2 est le lieu des points qui ont même puissance par rapport à C1 et à C2 On tape :
`axe_radical(cercle(0,1+i),cercle(1,1+i)))`
On obtient :
`Le tracé de la droite x=1/2`
En effet : la droite x=1/2 est la médiatrice du segment [0;1] On peut aussi faire écrire la fonction `axeradical` comme exercice de programmation.

    Axe_radical(C1,C2):={
    local O1,O2,r1,r2,H,t;
    O1:=centre(C1);
    O2:=centre(C2);
    r1:=rayon(C1);
    r2:=rayon(C2);
    t:=-(r2^2-r1^2)/2/longueur2(O2,O1)+1/2;
    H:=O1+(O2-O1)*t;
    return(perpendiculaire(H,droite(O1,O2)));
    };

## 1.13 La division harmonique

Quatre points A, B, C, D sont en division harmonique si on a :

CA

CB

=−

DA

DB

=k

On dit aussi que C et D divisent le segment AB dans le rapport k et que le point D est le conjugué harmonique de C par rapport à A et B.
On écrit les fonctions `conj_harmonic1` qui étant donné les points A,B et C sur la droite AB détermine le point D conjugué harmonique de C par rapport à A et B. On suppose que C sur la droite AB et on écrit :

    conj_harmonic1(A,B,C):={
    local D;
    D:=A+(B-A)*(C-A)/((C-B)+(C-A));
    return(D);
    };

On écrit la fonction `conj_harmonic2` qui définit les points C et D qui divise le segment AB dans le rapport k :

    conj_harmonic2(A,B,k):={
    local C,D;
    C:=A+k/(1-k)*(A-B);
    D:=A-k/(1+k)*(A-B);
    return([C,D]);
    };

Remarque Si C est le point qui divise le segment AB dans le rapport k, on a :
CA/CB=k donc CA−k CB=0 donc C est le barycentre de A affecté du coefficient 1 et B du coefficient −k. De même, si D est le point qui divise le segment AB dans le rapport −k, D est le barycentre de A affecté du coefficient 1 et B du coefficient k (si 1+k≠ 0 et si 1−k ≠ 0).
On tape par exemple:
`k:=2`
`C:=barycentre([[A,1],[B,-k]]))`
`D:=barycentre([[A,1],[B,k]])`
On remarquera aussi que `C:=element(droite(A,B),t);` signifie :
AC=t*AB donc :
`C-A:=t*(B-A)` soit `C:=(1-t)*A+t*B`.
On a donc :
CA/CB=t/t−1=k
On écrit la fonction `conj_harmonic3` en se servant de la commande `element` :

    conj_harmonic3(A,B,k):= {
    local C,D,t;
      t:=k/(k-1);
      C:=element(droite(A,B),t);
      D:=A+t/(2*t-1)*(B-A);
      return([point(C),point(D)]);
    }

Activité
Soient trois points A,B,M alignés. Construire géométriquement le point N conjugué harmonique de M par rapport à A et B.
Réponse
On définit 3 points A,B,C non alignés.
On trace la droite MC et la parallèle d1 (resp d2) à cette droite passant par A (resp B).
La droite BC coupe d1 en K et la droite AC coupe d2 en L
N est alors l’intersection de la droite KL avec la droite AB.
En effet :

- MA/MB=CB/CK car les parallèles d,d1,d2 coupent les droites AB et KB en M et C.
- CB/CK=CL/CA=BL/KA car les triangles CBL et CKA sont homothétiques.
- BL/AK=BN/AN=LN/KN car les triangles BLN et AKN sont homothétiques.

donc puisque BL/KA=−BL/AK on a :
MA/MB=−BN/AN.
On tape :

    A:=point(-2,-2.8);
    B:=point(2,-2.8);
    C:=point(0,-1);
    d0:=droite(A,B):;d0;
    t:=element(0..1,0.3);
    M:=element(d0,t);
    d:=droite(M,C,affichage=1);
    d1:=parallele(A,d,affichage=1);
    d2:=parallele(B,d,affichage=1);
    D1:=droite(A,C):;
    D2:=droite(B,C):;
    K:=inter(d1,D2)[0];
    L:=inter(d2,D1)[0]:;
    legende(L,"L",quadrant2);
    D3:=droite(K,L,affichage=2);
    N:=affichage(inter(d0,D3)[0],1+epaisseur_point_2);

On obtient :

Autre réponse
On définit 3 points A,B,C non alignés.
On définit les droites d1=CA, d2=CB, d3=CM. On peut alors tracer la droite d4 pour que le faisceau d1, d2, d3, d4 soit harmonique.
On trace D1 la parallèle à la droite d1 passant par B qui coupe CM en K. On définit L sur D1 tel que BK=BL et L ≠ K.
On trace CL qui coupe AB en N.

    A:=point(-2,-2);
    B:=point(3,-2);
    C:=point(0.13,-1);
    d0:=droite(A,B):;d0;
    t:=element(0..1,0.3);
    M:=element(d0,t);
    d3:=droite(C,M):;d3;
    d1:=droite(C,A);
    d2:=droite(C,B):;d2;
    D1:=parallele(B,d1,affichage=1);
    K:=inter(d3,D1)[0];
    L:=inter(cercle(B,K-B),D1)[1];
    d4:=droite(C,L,affichage=2);
    N:=affichage(inter(d0,d4)[0],1+epaisseur_point_2);

## 1.14 Polaires par rapport à deux droites

### 1.14.1 Définition

Le lieu des conjugués harmoniques d’un point A par rapport à deux droites D1,D2 est une droite d vérifiant :

- si D1 et D2 sont concourantes en O, la droite d passe par O et le faisceau (OA,d,D1,D2) est harmonique,
- si D1 et D2 sont paralléles, la droite d est paralléle à D1 et à D2, le faisceau (d′,d,D1,D2) est harmonique où d′ est la paralléle à D1 passant par A.

### 1.14.2 Un lieu

Soient un point S et trois points A,I,J alignés. Soit M un point variable de la droite SI. La droite AM coupe la droite SJ en N.
On cherche le lieu de K intersection de IN et de JM lorsque M se déplace sur la droite SI.

#### Les figures

On tape :

    S:=point(1+5i,affichage=1);
    A:=point(-4,affichage=1);
    I:=point(0,affichage=1);
    J:=point(7,affichage=1);
    droite(A,J);
    d:=droite(I,S,affichage=1);
    droite(S,J,affichage=1);
    t:=element((-2) .. 2,0.24,0.04)
    M:=element(d,t);
    N:=inter_droite(droite(A,M),droite(S,J),affichage=2);
    droite(A,M,affichage=2);
    segment(I,N);
    segment(J,M);
    K:=inter_droite(droite(I,N),droite(J,M),affichage=4);
    L:=lieu(K,M):;
    affichage(L,4+epaisseur_ligne_2);
    B:=conj_harmonique(I,J,A);
    droite(S,B);

On remarque que si B est le conjugué harmonique de A par rapport à I et J, le lieu L de K est la droite SB .

#### La démonstration

Le lieu de K est la polaire de A par rapport à CE et FG. En effet si CE et FG se coupent en S, si le point L est le conjugué harmonique de A par rapport à I et J et si le point P est le conjugué harmonique de A par rapport à M et N, la polaire de A par rapport à CE et FG passe par S, L et P, et la polaire de A par rapport à IN et JM passe par K, L et P donc, K se trouve sur la polaire de A par rapport à CE et FG.

## 1.15 Pôles et polaires par rapport à un cercle ou une conique

### 1.15.1 Définitions et propriétés

On dit que 2 points A et B sont conjugués par rapport à un cercle ou une conique (C) si ils forment une division harmonique avec les points E et F où la droite AB coupe (C).
Le lieu des conjugués harmoniques d’un point A par rapport à un cercle ou une conique C est une droite d appelée polaire de A par rapport à (C). Si la polaire d coupe (C) en T1 et T2 alors les droites AT1 et AT2 sont tangentes à (C).
Lorsque (C) est un cercle ou une conique propre à toute droite d on peut faire correspondre un point A qui admet d comme polaire par rapport à (C) : on dit que A est le pôle de d.
Si la conique est dégénérée en deux droites OU et OV chaque droite passant par O est la polaire d’une infinité de points alignés avec O (cf 1.14).

### 1.15.2 Comment trouver l’équation de la polaire

On va travailler en coordonnèes homogènes en dimension 2 :
un point M(x,y) a pour coordonnèes homogènes X,Y,T avec x=X/T et y=Y/T.
Si l’équation de la conique est : F(X,Y,T)=0 alors F est une forme quadratique de matrice Q et on a, si M=[X,Y,T] :

F(X,Y,T)=M*Q*M=0

La polaire du point A=[Xa,Ya,Ta] a pour équation :

X*FX′(Xa,Ya,Ta)+Y*FY′(Xa,Ya,Ta)+T*FT′(Xa,Ya,Ta)=0

ou encore :

Xa*FX′(X,Y,T)+Ya*FY′(X,Y,T)+Ta*FT′(X,Y,T)=0

ou encore :

M*Q*A=0

### 1.15.3 Comment trouver les coordonnées du pôle

Définitions
Une droite d d’équation ux+vy+h=0 a pour coordonnées tangentielles u,v,h.
L’équation tangentielle d’une courbe (C) est la condition nécessaire et suffisante pour que la droite d de coordonnées tangentielles [u,v,h] lui soit tangente.
Équation tangentielle de la conique (C)
L’équation tangentielle de la conique (C) d’équation F(X,Y,T)=M*Q*M=0 est :

G(u,v,h)=[u,v,h]*inv(Q)*[u,v,h]

Équation tangentielle de la polaire L’équation tangentielle de la polaire de A=[Xa,Ya,Ta] par rapport à la conique (C) est : A*Q.
Coordonnées du pôle
Soit d une droite de coordonnées tangentielles ud,vd,hd (donc d’équation ux+vy+h=0), le pôle de d par rapport à (C) a pour coordonnées homogènes :

Gu′(ud,vd,hd),Gv′(ud,vd,hd)Gh′(ud,vd,hd)

ou encore si Q1=det(Q)*inv(Q)

[ud,vd,hd]*Q1

### 1.15.4 Un exemple

Soient la conique C définie par x2+2x*y+2*y2−2*x=0, la droite db d’équation x+3y−1=0 et A le point 2+i.
Trouver la polaire da de A par rapport à C etle pôle B de db par rapport à C.
On tape :
`q1:=x```^```2+2*x*y+2*y```^```2-2*x`
`q:=numer(subst(q1,[x,y]=[X/T,Y/T]))`
On obtient :
`X```^```2-2*X*T+2*X*Y+2*Y```^```2`
On tape :
`Q:=q2a(q,[X,Y,T])`
On obtient :
`[[1,1,-1],[1,2,0],[-1,0,0]]`
On tape :
`Q1:=det(Q)*inv(Q)`
On obtient :
`[[0,0,2],[0,-1,-1],[2,-1,1]]`
On tape :
`M:=[X,Y,T]`
`U:=[u,v,h]`
`A:=[2,1,1]`
`da:=A*Q*M`
On obtient :
`2*X+4*Y-2*T`
La polaire da de A par rapport à C a donc pour équation : x+2y−1=0.
On tape :
`A*Q`
On obtient :
`[2,4,-2]`
La polaire da de A par rapport à C a donc pour équation tangentielle [2,4,-2] c’est à dire pour équation x+2y−1=0.
On tape :
`db:=[1,3,-1]`
`B:=db*Q1`
On obtient :
`[-2,-2,-2]`
Le pôle B de db par rapport à C a donc pour coordonnées : (1,1).
Pour avoir l’intersection i1 et i2 de db avec C, on tape :
`solve(normal(subst(x```^```2+2*x*y+2*y```^```2-2*x,x=1-3y))=0,y)`
On obtient :
`[1/5*(-1-sqrt(6)),1/5*(-1+sqrt(6))]`
Les points d’intersection i1 et i2 sont donc les points d’affixe z1 et z2 avec :
`z1:=1+1/5*(-1-sqrt(6))*(-3+i), z2:=1+1/5*(-1+sqrt(6))*(-3+i)`
Pour avoir l’équation tangentielle de la conique C, on tape :
`U:=[u,v,h]`
`G:=normal(U*Q1*U)`
On obtient :
`h```^```2+4*h*u-2*h*v-v```^```2`
On tape pour avoir l’équation tangentielle des tangentes à C passant par A (on choisit `h=1`) :
`normal(solve(subst([G=0,U*A=0],h=1),[u,v]))`
On obtient :
`[[(-sqrt(3)+1)/2,sqrt(3)-2],[(sqrt(3)+1)/2,-sqrt(3)-2]]`
Les tangentes à C passant par A ont donc pour équation :
(−√3+1)x/2+(√3−2)y+1=0 et (√3+1)x/2−(√3+2)y+1=0
On tape :
`plotimplicit(q1,[x,y]);a:=point(2+i);b:=point(1+i);`
`t1:=droite((1-sqrt(3))/2*x+y*(-2+sqrt(3))+1=0,affichage=1);`
`t2:=droite((1+sqrt(3))/2*x-y*(2+sqrt(3))+1=0,affichage=1);`
`db:=droite(x+3y-1=0);da:=droite(x+2y-1=0);`
`segment(z1,b,affichage=4);segment(z2,b,affichage=4);`
`si1:=point(z1,affichage=4);i2:=point(z2,affichage=4);`
On obtient :

## 1.16 Pôles et polaires par rapport à une sphère ou une quadrique

### 1.16.1 Définitions et propriétés

On dit que 2 points A et B sont conjugués par rapport à une sphère ou une quadrique (S) si ils forment une division harmonique avec les points E et F où la droite AB coupe (S).
Le lieu des conjugués harmoniques d’un point A par rapport à une sphère ou une quadrique (S) est un plan P appelée plan polaire de A par rapport à (S). Si le plan polaire P coupe (S) en la courbe T alors les droites joignant A à un point de T forment un cône tangent à (S).
Lorsque (S) est une sphère ou une quadrique propre, à tout plan P on peut faire correspondre un point A qui admet P comme polaire par rapport à (S) : on dit que A est le pôle de P.

### 1.16.2 Comment trouver l’équation de la polaire

On va travailler en coordonnèes homogènes :
en dimension 3 : X,Y,Z,T avec x=X/T, y=Y/T et z=Z/T.
Si l’équation de la quadrique est : F(X,Y,Z,T)=0 alors F est une forme quadratique de matrice Q et on a, si M=[X,Y,Z,T] :

F(X,Y,Z,T)=M*Q*M=0

Le plan polaire du point A=[Xa,Ya,Za,Ta] a pour équation :

XFX′(Xa,Ya,Za,Ta)+YFY′(Xa,Ya,Za,Ta)+ZFZ′(Xa,Ya,Za,Ta)+TFT′(Xa,Ya,Za,Ta)=0

ou encore :

XaFX′(X,Y,Z,T)+YaFY′(X,Y,Z,T)+ZaFZ′(X,Y,Z,T)+TaFT′(X,Y,Z,T)=0

ou encore :

M*Q*A=0

### 1.16.3 Comment trouver les coordonnées du pôle

Définitions
Un plan P d’équation ux+vy+wz+h=0 a pour coordonnées tangentielles u,v,w,h.
L’équation tangentielle d’une surface (S) est la condition nécessaire et suffisante pour que le plan P de coordonnées tangentielles [u,v,w,h] lui soit tangente.
Équation tangentielle de la quadrique (S)
L’équation tangentielle de la conique (S) d’équation F(X,Y,Z,T)=M*Q*M=0 est :

G(u,v,w,h)=[u,v,w,h]*inv(Q)*[u,v,w,h]

Équation tangentielle du plan polaire L’équation tangentielle du plan polaire de A=[Xa,Ya,Za,Ta] par rapport à la conique (C) est : A*Q.
Coordonnées du pôle
Soit d une droite de coordonnées tangentielles ud,vd,wd,hd (donc d’équation ux+vy+wz+h=0), le pôle de d par rapport à (C) a pour coordonnées homogènes :

Gu′(ud,vd,hd),Gv′(ud,vd,hd),Gh′(ud,vd,hd)

ou encore si Q1=det(Q)*inv(Q)

[ud,vd,wdhd]*Q1

### 1.16.4 Un exemple

Soient la quadrique S définie par x2+2x*y+2*y2−2*x−2y+z2=0, A le point [2,−1,1], le plan Pb d’équation x+2y+z−2=0 et le plan Pc d’équation x+3y+z−1=0.
Trouver la polaire da de A par rapport à S, le pôle B de db par rapport à S et le pôle C de dc par rapport à S.
On tape :
`q1:=x```^```2+2x*y+2*y```^```2-2*x-2y+z```^```2`
`q:=numer(subst(q1,[x,y,z]=[X/T,Y/T,Z/T]))`
On obtient :
`X```^```2-2*X*T+2*X*Y-2*Y*T+2*Y```^```2+Z```^```2`
On tape :
`Q:=q2a(q,[X,Y,Z,T])`
On obtient :
`[[1,1,0,-1],[1,2,0,-1],[0,0,1,0],[-1,-1,0,0]]`
On tape :
`Q1:=det(Q)*inv(Q)`
On obtient :
`[[-1,1,0,1],[1,-1,0,0],[0,0,-1,0],[1,0,0,1]]]`
On tape :
`M:=[X,Y,T]`
`U:=[u,v,h]`
`A:=[2,-1,1,1]`
`Pa:=A*Q*M`
On obtient :
`-Y+Z-T`
Le plan polaire da de A par rapport à S a donc pour équation : −y+z−1=0
On tape :
`A*Q`
On obtient :
`[0,-1,1,-1]`
Le plan polaire Pa de A par rapport à S a pour équation tangentielle [0,-1,1,-1] c’est à dire pour équation −y+z−1=0
On tape :
`Pb:=[1,2,1,-2]`
`B:=Pb*Q1`
On obtient :
`[-1,-1,-1,-1]`
Le pôle B de db par rapport à S est donc le point coordonnées [1,1,1].
On tape :
`Pc:=[1,3,1,-1]`
`C:=Pb*Q1`
On obtient :
`[1,-2,-1,0]`
Le pôle C de dc par rapport à S se trouve à l’infini dans la direction [1,-2,-1] car le plan Pc passe par le centre de l’ellipsoide S On tape :
`normal(solve([Pa=0,qq=0,T=1],[X,Y,Z,T]))`
On obtient :
`[[X,(-X+sqrt(-2*X```^```2+6*X-3))/3,(-X+sqrt(-2*X```^```2+6*X-3)+3)/3,1],`
`[X,(-X-sqrt(-2*X```^```2+6*X-3))/3,(-X-sqrt(-2*X```^```2+6*X-3)+3)/3,1]]`
On tape :
`CC:=plotparam([X,(-X+sqrt(-2*X```^```2+6*X-3))/3,`
`(-X+sqrt(-2*X```^```2+6*X-3)+3)/3],X)`
`CC2:=plotparam([X,(-X-sqrt(-2*X```^```2+6*X-3))/3,`
`(-X-sqrt(-2*X```^```2+6*X-3)+3)/3],X)`
Pour avoir le cône des tangentes de sommet `a`, on tape :

    conetan():={
    local L,M,N,X;
    L:=NULL;
    a:=point([2,-1,1]);
    pour X de 0.63 jusque 2.37 pas 0.1 faire
    M:=point(X,(-X+sqrt(-2*X^2+6*X-3))/3,
       (-X+sqrt(-2*X^2+6*X-3)+3)/3);
    N:=point(X,(-X-sqrt(-2*X^2+6*X-3))/3,
       (-X-sqrt(-2*X^2+6*X-3)+3)/3);
    L:=L,droite(a,M),droite(a,N);
    fpour;
    retourne L;
    }:;

Dans un écran de géométrie 3d on tape :

    plotimplicit(q1,[x,y,z],affichage=rouge);
    plan(-y+z-1=0,affichage=jaune);
    affichage([CC,CC2],vert+epaisseur_ligne_7);
    a:=point([2,-1,1]);
    conetan();

On obtient :

## 1.17 Les coniques

- L’ellipse
  `ellipse(A,B,C)` trace l’ellipse de foyers `A` et `B` passant par `C`.
  `ellipse(A,B,a)` où `a` est un réel, trace l’ellipse de foyers `A` et `B` ayant `a` comme demi-grand axe.
- L’hyperbole
  `hyperbole(A,B,C)` trace l’hyperbole de foyers `A` et `B` passant par `C`.
  `hyperbole(A,B,a)` où `a` est un réel, trace l’hyperbole de foyers `A` et `B` ayant `a` comme demi-grand axe.
- La parabole
  `parabole(A,B)` trace la parabole de foyer `A` et de sommet `B`.

Activité
Tracer un cercle tangent à une droite et passant par deux points donnés.
Pour cela, créer quatre points `A`, `B`, `C` et `D`.
Tracer la droite `E` passant par `A` et `B`.
Construire un cercle `C1` passant par `C` et `D` tangent à la droite `E`.
Réponse
On sait que le centre du cercle cherché est sur la médiatrice de CD et sur la parabole P de foyer C et de directrice la doite AB.
On clique avec la souris pour avoir quatre points `A`, `B`, `C` et `D` puis on exécute la liste des instructions qui se trouve dans `geo11` (faire `Charger session` du menu `Fich` de `Xcas` et selectionner `geo11` du répértoire `examples/geo` pour exécuter ce fichier).
Voici le détail de `geo11` :
`E:=droite(A,B)`
trace la droite E passant par A et B,
`M:=mediatrice(C,D)`
trace la médiatrice de CD,
`H:=projection(E,C)`
définit la projection orthogonale de C sur E,
`P:=parabole(C,milieu(C,H)))`
trace la parabole de foyer C et de directrice E,
`N:=inter(P,M)`
N est la liste des points d’intersection de la droite M et de la parabole P,
`C1:=cercle(N[0],C-N[0])`
trace le cercle de centre `N[0]` passant par `C` : il repond à la question.
`C2:=cercle(N[1],C-N[1])` trace le cercle de centre `N[1]` passant par `C` : il repond à la question.
`Q:=parabole(D,milieu(D,projection(E,D)))` trace la parabole de foyer D et de directrice E, elle passe par N. Cela prouve qu’il n’y a pas d’autres solutions.

Retour à la page personnelle de Bernard Parisse.