jeudi 21 septembre 2023

Repères cartésiens

Outil pour illustrer des articles de mathématique ou de physique en 2 ou 3 dimensions : axes, bases, points, segments, vecteurs, angles, etc.

Usage

On suppose que le script axes.js est disponible.

Exemple : si ce script est dans le dossier du fichier html, il faut inclure dans le fichier html la balise :

<script src="axes.js"></script>

Les dessins se font sur un canvas. Exemple de balise dans le fichier html :

<canvas id='fig0' width='200' height='200'></canvas>

Contexte

L'obtention du contexte se fait grâce à la fonction initCtx.

Sa signature est initCtx(id, X, Y, u, dim) où :

Exemple : initCtx('fig0', 50, 150, 40, 2); utilisera le canvas identifié par 'fig0' et placera l'origine O à 50 du bord droit et à 150 à partir du haut. L'échelle du dessin sera de 40. Le dernier paramètre indique que l'on travaillera dans le plan.

Dans la suite je discuterai les deux situations Dans le plan, Dans l'espace.

L'objet point

L'objet fondamental est l'objet Pt.

Dans le plan : un objet Pt possède 4 attributs :

Dans l'espace : un point Pt possède 6 attributs :

Tous deux possèdent un attribut facultatif name le nom du point. e.g. "A"

Exemple

a = new Pt([1, 3], "A"); // dans le plan
a = new Pt([1, 2, 3], "A"); // dans l'espace

La fonction implicite reconnait la dimension de l'espace affine en dénombrant l'array donné comme premier paramètre.

Elle calcule ensuite les attributs X, Y.

Variables globales

O : origine du repère de coordonnées [0, 0], ou [0, 0, 0].

ctx : contexte graphique au sens de js. Ses attributs (publics) sont :

ctx.dim : 2 pour le plan

ctx.O_X et ctx.O_Y mais on préfèrera utiliser O.X et O.Y.

ctx.u l'échelle du tracé

ctx.fontSize la taille de la police (11 par défaut), qui peut être modifiée manuellement. e.g. ctx.fontSize = 12 ou à la volée.

cosphi et sinphi, par défaut cos(π/6) et sin(π/6). C'est l'angle $(\vec, -\vec{k})$.

Fonctions de tracé

C'est la même syntaxe aussi bien pour le plan que pour l'espace.

On suppose que les points A et B ont été définis par A = new Pt([ ...], "A") et B = new Pt[ .. ], "B").

Segment de droite

A.ligne(B) trace le segment [AB].

Un argument facultatif true trace la ligne en pointillé, e.g. A.line(B, true).

Vecteur

A.arrow(B) trace le segment terminé (en B) par une flèche.

Marquer un point

A.mark() trace un point, une sorte de petit disque.

Nommer un point ou un vecteur

Si le point A possède un attribut name, on peut marquer ce nom sur le contexte graphique par la fonction A.label(dX, dY). Ce nom apparaît à proximité du point avec un décalage de dX et dY.

Exemple : A.label(2, 10) à droite à 2 pixels et plus bas de 10 pixels.

Remarque j'écris pixel, mais CanvasRenderingContext2D semble fournir plusieurs pixels pour le prix d'un, puisqu'on peut faire ctx.lineWidth = 0.5 pour obtenir des traits fins.

La fonction label permet d'afficher le nom du point surmonté d'une flèche.

Exemple A.mark(2, 10, true) tracera $\vec{A}$.

On peut aussi utiliser une fonction vec(s, X, Y) pour inscrire tout autre texte surmonté d'une flèche.

Exemple : vec("AB", B.X + 2, B.Y + 4) tracera à proximité de B (2 à droite, 4 plus bas) $\vec{AB}$. C'est une sorte de ∖vec de LaTex.

Illustration

Le code :

initCtx('fig1', 100, 100, 50, 2);
axis();
let A = new Pt([-1, -0.5], "A");
let B = new Pt([1, 1], "B");
A.mark(0, 10);
A.label(0, 10);
A.arrow(B);
B.label(0, 10);
vec("AB", B.X - 30, B.Y + 10);

donnera la figure :

Figure 1

Axes et bases

La fonction axis() dessine les axes Ox, Oy (éventuellement Oz).

La fonction basis() trace les vecteurs $\vec{i}$, $\vec{j}$, (éventuellement $\vec{k}$). Une option axis(true) permet d'ajouter la lettre O.

On peut cumuler les deux :

axis();
basis(); // sans l'argument true puisque O a été inscrit par axis

Dessin d'un arc dans un angle

Exemple :

initCtx('fig2', 100, 150, 40, 3);
basis(true);
let A = new Pt([1, 3, 0.5]); 
let A3 = new Pt([1, 3, 0]);
let B = new Pt([0, 2, 2]);
O.arrow(A);
O.arrow(B);
O.arc(A, B);

affichera :

Figure 2

Commentaires sur le script

Le script axes.js est disponible ici : axes.js.

La fonction function proj(p) s'entend comme la projection de (x, y) ou (x, y, z) sur le plan du contexte graphique.