Ce document décrit les constructions classiques et tours de main avec JavaSketchpad©
Il est réparti sur plusieurs pages, à cause du nombre important d'applets.
Les applets d'illustration montrent les éléments donnés en bleu, les éléments construits en rouge
et les éléments intermédiaires (normalement "hidden") en d'autres couleurs.
Les codes fournis sont directement interprétables avec mon compilateur (genapp),
sinon il faut transformer les éléments symboliques en leur numéro d'ordre dans la construction.
Mais ils sont réduits à la seule partie démonstrative de la construction
(les éléments de base bleus n'y sont pas définis).
Le code complet est de toute façon disponible dans le source de la page !
Comme il s'agit d'astuces, utilisant parfois des effets de bords, ceci est valable avec la version actuelle
de JavaSketchpad (DR4.07) et pourra évoluer.
{M} Dilation (A,B,0.5);
(inutile de fournir une applet de démonstration tout de même !)
{ si pas déja tracé, ou Segment } {ab} Line (A,B)[hidden]; {M} Dilation (A,B,0.5); Perpendicular (ab,M); |
{O} Point (100,100); {r} Translation (O,70,0)[hidden]; {C} Circle (O,r)[hidden]; {u} Point on object (C, -0.7); {d} Line (O,u)[red]; |
{Cd Ray (D,C) } {Cm} Rotation/MarkedAngle (Cd,C,A,O,B); |
{B!} VectorTranslation (B,A,C)[hidden]; {M} Rotation/MarkedAngle (B!,C,B!,C,D); {M!} Dilation (M,C,-1); |
{A1} Rotation (A0,O, 1.256637061435917295385); {c0} Segment (A0,A1)[red]; {A2} Rotation (A1,O, 1.256637061435917295385); {c1} Segment (A1,A2)[red]; {A3} Rotation (A2,O, 1.256637061435917295385); {c2} Segment (A2,A3)[red]; {A4} Rotation (A3,O, 1.256637061435917295385); {c3} Segment (A3,A4)[red]; {c4} Segment (A0,A4)[red]; |
{ calcul 3pi/5 } {c} Distance (A0,A1,0,0,' ')[hidden]; {a} Calculate (0,0,' ','1@atan12*5/')(c)[hidden]; {c0} Segment (A0,A1); {A2} Rotation/MeasuredAngle (A0,A1,a); {c1} Segment (A1,A2); {A3} Rotation/MeasuredAngle (A1,A2,a); {c2} Segment (A2,A3); {A4} Rotation/MeasuredAngle (A2,A3,a); {c3} Segment (A3,A4); {c4} Segment (A0,A4); |
On peut avoir intérêt à calculer directement les sommets plutôt que de cumuler les erreurs...
Exemple : Hexagone
{A1} Rotation (A0,O, 1.047197551196597746)[label('A1'),red]; {c0} Segment (A0,A1)[red]; {A2} Rotation (A0,O, 2.0943951023931954923)[label('A2'),red]; {c1} Segment (A1,A2)[red]; {A3} Dilation (A0,O,-1)[label('A3'),red]; {c2} Segment (A2,A3)[red]; {A4} Rotation (A0,O, -2.0943951023931954923)[label('A4'),red]; {c3} Segment (A3,A4)[red]; {A5} Rotation (A0,O, -1.047197551196597746)[label('A5'),red]; {c4} Segment (A4,A5)[red]; {c5} Segment (A0,A5)[red]; |
{A!} Rotation/MarkedAngle (A,O,A,O,B)[hidden]; {I} Dilation (A,A!, 0.5)[hidden]; {Oi} Ray (I,O)[red]; |
On peut remplacer Ray par Line, ou tracer le symétrique de I :
{I!} Dilation (I,O, -1)[hidden];
pour la bisectrice de l'angle >180°
La bisectrice extérieure est perpendiculaire à la bisectrice intérieure :
{Oj} Perpendicular (Oi,O);
{a} Angle (A,O,B,0,0,' ')[hidden]; {a!} Calculate (0,0,' ','1@atanA*135/')(a)[hidden]; {A!} Rotation/MeasuredAngle (A,O,a!)[hidden]; {OA1} Ray (A!,O); {OA2} Rotation (OA1,O, 2.0943951023931954923); {OA3} Rotation (OA1,O, -2.0943951023931954923); |
Les transformations s'effectuent sur tous les points de la droite, l'origine et l'orientation s'en déduisent.
{OA} Ray (A,O); {OA!} Rotation (OA,I,0.785398); {A!} Point on object (OA!,1); ... |
Une perpendiculaire est une rotation de -π/2
P est à 0.5 sur cette droite De même une parallèle = rotation de 0 et P à 0.5 |
{OA} Ray (A,O); {perp} Perpendicular (OA,P); {O!} Point on object (perp,0); {A!} Point on object (perp,1); {para} Parallel (OA,P); ... |
Un cercle est toujours orienté dans le sens horaire, et son origine à θ = 0 (horizontal dans le sens des x > 0)
Ainsi un Point on object sur un cercle est-il défini dans ce sens, à partir de ce point là.
Un point à 45° dans le sens trigonométrique est donc à -π/4 comme Point on object.
(alors qu'il est obtenu par un Rotation de +π/4)
Revenons aux intersections de cercles avec des droites et des cercles :
Dans le sens de parcours de la droite
- Intersect1 est le premier point rencontré
- Intersect2 est le deuxième point rencontré |
Les intersections de cercles sont plus compliquées à prévoir :
Les intersections sont les intersections avec leur axe radical,
l'orientation de celui-ci est définie par l'orientation de la
ligne des centres,
En particulier les intersections sont échangées si on échange
les deux cercles, inversant ainsi
l'orientation de la ligne des centres.
De façon contre-intuitive, l'orientation de l'axe radical des cercles C1,C2 est celle de la
perpendiculaire à O1→O2, de sorte que les points
{P1} Intersect1 (C1,C2); |
{O1O2} Line (O2,O1)[hidden]; {axe} Perpendicular (O1O2,P1)[hidden]; {P1!} Intersect1 (axe,C2); |
L'applet montre l'orientation des droites sous forme de deux demi-droites issues de leur origine, la demi-droite bleue étant dans le sens > 0.
{oo} Line (O2,O1); {I1} Intersect1 (C1,C2)[label('1')]; {I2} Intersect2 (C1,C2)[label('2')]; {axe} Perpendicular (oo, I2); {ab} Line B,A); {P1} Intersect1 (ab,C2)[label('1')]; {P2} Intersect2 (ab,C2)[label('2')]; |
{perp} Perpendicular (d, O)[hidden]; Reflection (A,perp); |
Etant donnée deux cercles se coupant en A,
construire le second point d'intersection.
Idem, ne pas utiliser Intersect1/Intersect2 mais :
{oo} Line (O1, O2)[hidden]; Reflection (A,oo); |
Une méthode efficace ici est de tracer deux sécantes parallèles quelconques coupant les deux droites en AA' et BB'
alors construire un triangle P'BB' semblable à PAA' donne un point P' sur la droite cherchée.
La seule difficulté est le choix des sécantes. Elles sont ainsi définies par des Point on object A, A' et B.
Un choix automatique de ces points est impossible car de trop nombreux cas particuliers se présentent.
Dans l'applet de démonstration A,A' et B sont les points qui servent aussi à définir d et d'.
{A} Point on object (d,0)[hidden]; {B} Point on object (d,1)[hidden]; {A!} Point on object (d!,0)[hidden]; {aa} Line (A,A!)[green]; {bb} Parallel (aa,B)[green]; {B!} Intersect (bb,d!)[hidden]; {pa} Line (P,A)[hidden]; {pa!} Line (P,A!)[hidden]; {p!b} Parallel (pa,B)[hidden]; {p!b!} Parallel (pa!,B!)[hidden]; {P!} Intersect (p!b,p!b!)[hidden]; {pp} Line (P,P!); |