Obsolete (plus d'applets Java)

Exemples JavaSketchpad - Cercles

cercle de centre A de rayon = BC

Désolé, votre navigateur n'est pas compatible Java.
{C!} VectorTranslation (C,B,A)[hidden];
     Circle (A,C!);

On peut inverser la construction en copiant un cercle de centre B :

{C*} Circle (B,C)[hidden];
     VectorTranslation (C*,B,A)

Ou par une mesure :
Désolé, votre navigateur n'est pas compatible Java.

{r} Distance (B,C,0,0,' ')[hidden];
    Circle by radius (A,r);

Cercle par trois points

Désolé, votre navigateur n'est pas compatible Java. C'est à dire le cercle circonscrit à ABC
{M} Dilation (B, C, 0.5)[hidden];
{bc} Line (B, C)[hidden];
{om} Perpendicular (bc, M)[hidden];
{N} Dilation (A, B, 0.5)[hidden];
{ab} Line (A, B)[hidden];
{on} Perpendicular (ab, N)[hidden];
{O} Intersect (om, on)[hidden];
    Circle (O, A);

Une autre méthode, juste pour le fun :
Soit une droite d quelconque passant par B
Construisons la droite d' passant par C avec les angles orientés de droites (d',CA) = (d,BA),
Le point d'intersection de d et d' décrit le cercle circonscrit à ABC (angles inscrits)
Désolé, votre navigateur n'est pas compatible Java.
La droite d est définie par un point parcourant un cercle quelconque de centre B
Le cercle quelconque est ici choisi par simplification comme le cercle passant par A.
Le cercle (ABC) est alors obtenu comme lieu géométrique.

{Kb} Circle (B,A)[hidden];
{D} Point on object (Kb, -1)[hidden];
{D!} Rotation/MarkedAngle (A,C,A,B,D)[hidden];
{d} Line (B,D)[hidden];
{d!} Line (C,D!)[hidden];
{M} Intersect (d,d!)[hidden];
    Locus (M,D,Kb, 200)[red];

Aucune de ces méthode ne fonctionne si ABC sont alignés (le "cercle" ABC dégénère alors en la droite ABC)
La méthode par lieu géométrique fournit des tracés complètement aberrants quand ABC sont presque alignés si le nombre de points du lieu est trop faible.
Cette méthode est d'ailleurs donnée uniquement à titre de curiosité, car elle ne permet pas d'obtenir le centre, ni des points d'intersections de ce cercle avec d'autres droites/cercles.

Tracé d'un arc de cercle

Désolé, votre navigateur n'est pas compatible Java. Obtenu comme lieu géométrique
{AB} Segment (A,B)[hidden];
{P} Point on object (AB, 0)[hidden];
{M} Rotation/MarkedAngle (A,O,A,O,P)[hidden];
{arc} Locus (M,P,AB, 100);

Si l'arc est voisin de 180°, ou >180°, il faut le scinder en plusieurs.
Sans connaître à priori l'angle, la construction devient très compliquée (constructions conditionnelles)

Le plus simple est alors par calcul :
Désolé, votre navigateur n'est pas compatible Java.

{OA} Segment (A,O)[hidden];
{P} Point on object (OA, 0)[hidden];
{t} Ratio/Points (O,A,P,0,0,' ')[hidden];
{a} Angle (A,O,B,0,0,' ')[hidden];
{ convertit en radians au besoin et entre 0 et 2π, point courant }
{at} Calculate (0,0,' ','A!@sgn_1+2/@rond1@atan8**1@atanA*45/+B*')(a,t)[hidden];
{M} Rotation/MeasuredAngle (A,O,at)[hidden];
{arc} Locus (M,P,OA, 100);
L'applet de démonstration dissocie les différents calculs dans {at} par étapes
Conversion en radians :
{arad} Calculate (5,30,'radians = ','1@atanA*45/')(a);
Angle entre 0 et 2π :
{arad2} Calculate (5,45,'radians = ','A!@sgn_1+2/@rond1@atan8**A+')(arad);
Point courant :
{at} Calculate (150,30,'a(t) = ','AB*')(arad2,t);

Attention aux paramètres "DirectedAngles" et "MeasureInDegrees" de l'applet.
Les angles sont, dans les calculs et les constructions, toujours exprimés en radians. Par contre une mesure d'angle dépend du paramètre MeasureInDegrees !
L'applet est ici avec MeasureInDegrees=1 et DirectedAngles=1
Si MeasureInDegrees=0, la conversion en radians 1@atanA*45/ est inutile, A suffit
Il est recommandé de mettre toujours DirectedAngles=1, quitte à afficher par calcul des valeurs absolues.

Tracé d'un secteur de cercle

Désolé, votre navigateur n'est pas compatible Java. Obtenu comme "lieu géométrique" d'un rayon.
Cela ne fonctionne vraiment qu'avec un très grand nombre de points dans le Locus.
On remplace (ou complète) les constructions précédentes d'un arc de cercle par :

{OM} Segment (O,M)[hidden];
{sect} Locus (OM,P,OA, 2000);
noter le nombre de points !
Et c'est encore insuffisant pour tout peindre (mais plus de points rallentit beaucoup trop l'applet)

Attention ! Pour que ce secteur ne recouvre pas les autres tracés, il faut jouer avec layer( )

On peut aussi approximer le secteur par un polygone, mais il faut définir explicitement chacun des sommets :
Désolé, votre navigateur n'est pas compatible Java. Ici avec 6 sommets (si l'angle est fixe, le calcul est inutile, de simples Rotation() suffisent)

{a} Angle (A,O,B,0,0,' ')[hidden];
{ AOB/6, convertit en radians au besoin et entre 0 et 2π }
{at} Calculate (0,0,' ','A!@sgn_1+2/@rond1@atan8**1@atanA*45/+6/')(a)[hidden];
{M1} Rotation/MeasuredAngle (A,O,at)[hidden];
{M2} Rotation/MeasuredAngle (M1,O,at)[hidden];
{M3} Rotation/MeasuredAngle (M2,O,at)[hidden];
{M4} Rotation/MeasuredAngle (M3,O,at)[hidden];
{M5} Rotation/MeasuredAngle (M4,O,at)[hidden];
{M6} Rotation/MarkedAngle (A,O,A,O,B)[hidden];
     Polygon (O,A,M1,M2,M3,M4,M5,M6);
Si l'angle est ici > 90° environ, le nombre de sommets 6 est insuffisant.
L'augmenter au besoin (la démo est avec 20 sommets).

Tangentes à un cercle

Désolé, votre navigateur n'est pas compatible Java. Le cercle de diamètre OP coupe le cercle donné (C) en les points de contact :

{M} Dilation (O,P, 0.5)[hidden];
{Kop} Circle (M,O)[hidden];
{T1} Intersect1 (Kop,C);
{ot1} Line (O,T1)[hidden];
{pt1} Perpendicular (ot1,T1);
{T2} Intersect2 (Kop,K);
{ot2} Line (O,T2)[hidden];
{pt2} Perpendicular (ot2,T2);
L'astuce consiste non pas à tracer PT1 et PT2, mais les perpendiculaires en T1 et T2 aux rayons OT1 et OT2. Car le tracé direct des tangentes PT1 et PT2 échoue si P est sur le cercle.
Bien sûr cette complication est inutile si on sait que P ne peut pas être sur le cercle...
Inversement, la construction proposée échoue si le cercle a un rayon nul (cercle point).
(Et pas de solution fiable dans ce cas, JavaSketchpad gèrant de façon imprévisible les intersections avec un cercle point)

Une méthode fonctionnant alors dans tous les cas, y compris r = 0, est obtenue par calcul :

Désolé, votre navigateur n'est pas compatible Java.

{ mesures }
{d} Distance (O,P,0,0,' ')[hidden];
{r} Radius (K,0,0,' ')[hidden];

{ tangente }
{a} Calculate (0,0,' ','AB/@asin')(r,d)[hidden];
{xx} Line (O,P)[hidden];
{tt} Rotation/MeasuredAngle (xx,P,a)[red];
{OT} Perpendicular (tt,O)[hidden];
{T1} Intersect1 (OT,K);
{tt!} Reflexion (tt,xx);
La seconde tangente est alors obtenue par reflexion.

Tangentes communes à deux cercles

La construction "scolaire" ne marche que si r2 > r1 : une petite subtilité permet de l'utiliser avec des rayons "négatifs".
L'astuce est de reporter t2 → T2 par un Dilation/3PtRatio qui permet ainsi de tenir compte du signe de r2 - r1.
Mais la construction échoue encore si r1 = r2. (aucun problème pour la tangente commune intérieure bien sûr).

Désolé, votre navigateur n'est pas compatible Java.

{ cercle de diamètre O1O2 }
{M} Dilation (O1,O2, 0.5)[hidden];
{Koo} Circle (M,O1)[hidden];

{ tangentes extérieures }
{r2-r1} VectorTranslation (O1,r1,r2)[hidden];
{K-} Circle (O2,r2-r1)[hidden];
{t2-} Intersect1 (Koo,K-)[hidden];
{T2-} Dilation/3PtRatio (t2-,O2,O2,r2-r1,r2);
{O2t2-} Line (O2,t2-)[hidden];
{tt2-} Perpendicular (O2t2-,T2-);
{T1-} VectorTranslation (T2-,t2-,O1);

{ tangentes intérieures }
{r2+r1} VectorTranslation (r1,O1,r2)[hidden];
{K+} Circle (O2,r2+r1)[hidden];
{t2+} Intersect1 (Koo,K+)[hidden];
{T2+} Dilation/3PtRatio (t2+,O2,O2,r2+r1,r2);
{O2t2+} Line (O2,t2+)[hidden];
{tt2+} Perpendicular (O2t2+,T2+);
{T1+} VectorTranslation (T2+,t2+,O1);
L'autre tangente est obtenue par symétrie sur la ligne des centres, ou en utilisant l'autre point d'intersection avec le cercle de diamètre O1O2.
Une autre construction possible est d'utiliser les centres d'homothétie des deux cercles. Mais c'est toujours mis en défaut si r1 = r2 !

Désolé, votre navigateur n'est pas compatible Java.

{ centres d'homothétie }
{d2} Rotation (oo,O2,1.5)[hidden];
{d1} Parallel (d2,O1)[hidden];
{C2} Intersect1 (d2,K2)[hidden];
{C1} Intersect1 (d1,K1)[hidden];
{C1*} Intersect2 (d1,K1)[hidden];
{c1c2} Line (C1,C2)[hidden];
{I} Intersect (c1c2,oo)[hidden];
{c1c2*} Line (C1*,C2)[hidden];
{J} Intersect (c1c2*,oo)[hidden];

{ tangentes issues de I et J }
{M} Dilation (I,O2, 0.5)[hidden];
{Ki} Circle (M,O2)[hidden];
{T2i} Intersect1 (Ki,K2);
{it2} Line (I,T2i);
{T1i} Dilation/3PtRatio (T2i,I,I,O2,O1);

{N} Dilation (J,O2, 0.5)[hidden];
{Kj} Circle (N,O2)[hidden];
{T2j} Intersect1 (Kj,K2);
{jt2} Line (J,T2j);
{T1j} Dilation/3PtRatio (T2j,J,J,O2,O1);
Ici, pour simplifier, les tangentes sont directement les droites IT2 et JT'2, donnant des résultats aberrants si les cercles sont tangents.
On pourait remplacer par les perpendiculaires à O2T2 en T2 (resp. à O2T'2 en T'2).
L'angle de la droite d2 = O2C2 est quelconque ≠ 0. Le point vert C2 draggable dans l'applet permet de le changer.

Pour obtenir une construction qui fonctionne automatiquement dans tous les cas, y compris r1 = r2, le plus simple est de procéder par calcul :
Dans la première construction, l'angle du rayon O1T1 avec la ligne des centres est (O1O2,O1T1) = (O1O2, O1t2) + π/2 et comme (O1O2, O1t2) = Arcsin( (r2 - r1)/d) ), on obtient finalement (O1O2,O1T1) = Arccos( (r1 - r2)/d ) avec d = O1O2. Cette formule est valable quels que soient r1 et r2
On a de même (O1O2,O1T '1) = Arccos( (r1 + r2)/d ) pour la tangente intérieure.
Si |r2 - r1|/d > 1 (resp. (r2 + r1)/d > 1), la tangente n'existe pas et le Arccos renvoie "undefined".

Désolé, votre navigateur n'est pas compatible Java.

{ mesures }
{d} Distance (O1, O2, 0, 0, ' ')[hidden];
{r1} Radius (K1, 0, 0, ' ')[hidden];
{r2} Radius (K2, 0, 0, ' ')[hidden];

{ tangentes extérieures }
{a} Calculate (0,0,' ','AB-C/@acos')(r1,r2,d)[hidden];
{Ox} Line (O2, O1)[hidden];
{O1t} Rotation/MeasuredAngle (Ox, O1, a)[hidden];
{T1} Intersect2 (O1t, K1);
{tt} Perpendicular (O1t, T1);
{O2t} VectorTranslation (O1t, O1, O2)[hidden];
{T2} Intersect2 (O2t, K2);

{ tangentes intérieures }
{a!} Calculate (0,0,' ','AB+C/@acos')(r1,r2,d)[hidden];
{O1t!} Rotation/MeasuredAngle (Ox,O1,a!)[hidden];
{T1!} Intersect2 (O1t!,K1);
{tt!} Perpendicular (O1t!,T1!);
{O2t!} VectorTranslation (O1t!,O1,O2)[hidden];
{T2!} Intersect1 (O2t!,K2);

Dans les applets ci-dessus, les cercles et les points de contrôle des rayons sont astreints sur une ligne horizontale pour pouvoir obtenir facilement le cas r1 = r2 (sinon aucune chance). Mais la construction proposée marche quels que soient ces points.
Il est juste nécessaire pour le VectorTranslation définissant r2 ± r1 que O1r1 soit parallèle à O2r2.

 

Accueil Arithmétiques Géométrique Divers Thèmes Scripts Jeux Exercices Sujet précédent Sujet suivant   Parent