Triangle mystérieux

On souhaite dans cet exercice construire une figure géométrique à l'aide d'un processus itératif : nous allons reproduire, à plusieurs reprises, les mêmes étapes de construction.

On considère pour débuter trois points non alignés \(A\), \(B\) et \(C\) formant un triangle et l'on place, à l'intérieur du triangle \(ABC\), un point \(P\) choisi de manière aléatoire.

Le processus répété est le suivant :

  • Étape 1: on choisit aléatoirement un des points \(A\), \(B\) ou \(C\);

  • Étape 2: on construit le milieu du segment d'extrémités \(P\) et le sommet choisi à l'étape 1;

  • Étape 3: on considère désormais que \(P\) est le milieu obtenu à l'étape 2.

De façon générale, à chaque étape, on construit un « nouveau » point \(P\) à partir du précédent.

Cette construction permet d'obtenir une « jolie » figure... Laquelle ? Pour le savoir, vous devrez réussir l'exercice !


Cet exercice comporte plusieurs questions permettant d'envisager successivement les différentes étapes de la construction.

Les éditeurs associés à chaque question restent toutefois indépendants : vous pouvez les aborder dans l'ordre souhaité.

Dessiner des points

On utilise sur cette page une fonction dessine_point qui prend en paramètre un point et affiche ce point sur une figure. Par exemple, le code ci-dessous permet de dessiner le point A à l'écran :

Utilisation de <code>dessine_point</code>
A = (50, 50)
dessine_point(A)

Cette fonction est déjà chargée dans l'éditeur : il ne faut pas la rédiger. Vous devez simplement l'utiliser !

Reproduire la figure ci-dessous dans laquelle les sommets du rectangle ont pour coordonnées :

  • \(\left(0~;~0\right)\) ;
  • \(\left(400~;~ 0\right)\) ;
  • \(\left(400~;~ 200\right)\) ;
  • \(\left(0~;~ 200\right)\).

Les autres points sont régulièrement espacés de \(20\) pixels.

Rectangle

Boucle for

On pourra utiliser une boucle for comme dans l'exemple ci-dessous qui dessine le premier « segment » du rectangle :

for x in range(0, 420, 20):  # x varie entre 0 (inclus) et 420 (exclu), de 20 en 20
    P = (x, 0)
    dessine_point(P)

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3o_8bcdufvg/0ly n7apSr1me,(P2=4:twki95hx)6050i0A0I0u0L0p0b0r0h0p0u0b0b0F010I0L0v010406050b0j0z0z0u0x0q040w0d0p0j0,0d0s050n0?0^0`0|0;0v04151c051f0n1f1h1c0;0i0L0l0!0$0(0*0O0L0m0O0p1v0O0I0/050V0g0p0A1q0%0)011u1w1y1w0I1E1G1C0I0g0d0i0|1D0x1d0I0O0!0 0b0v0u0s0*0E011I1s010k0X0A0s0u0z0A1C1*1,1;1K1@1G1`1|0/0a0r0D0x0d0v0d0b0L120s0r0T1(0x0x0A0h2h151 0s1d0n1$2u0I1!1Z1#0i210*1y0s1_2e1C1n1p0#1J2E0L2G0s1W1o1C0v2n1d2s2u2Y0=1+2i2M1=2R0x0_0p0/0r0y2r2$0:2#202(1K2*2,2.0E2;1,2?2s2D012{0u2-040r0c2 2t0;322_0*35370r0G3b312$333h2.0N3l3d3n3f340d2+362.0R3s2@2%1r2`3x2|380t3C3e3F3g3H3z380f3L3u3N3w3y3i0M3T2^3V3p040y0o3!3E2N3W3I0y2:162=1e2W152K2x0i2B330h1W1}1d3`1g3^2!3=30053 0T2X3U3-0K0/0k3x3l0r3D3o0/0P4j4l3v0d0J0/2P4p3M3-0s0g0/0x1,0m0A3l4q3V0.040C4G4x1=0z0L0/3*472t4H3-4J0B4w4d4O4Q040G0o3;2!4N1K4X4Z3#3-4P0/0E4S4+4!4-0/0Q0H3s0r504k4,3g0/0D4/3,1=0d0/0F57334J4L4T4c4:2)4n4M4`0*4.5h525n014=044^3?53014J0Q4 514V5k040T0(2P0A0e2d2P0I5m5j4{4K5P582`555T5e4|5C505E5V04565q5$0*5a045c5*5y5f5X3v0s5l5h5+5z0/4Y5:5s5u4@5w485;5Z5h06515r5Q545G0A5I2G5L0d5N5?4I0/5g4_6b345W5`65045B673t6p4f044h0x5d5@0/0q6D3V4s4u145 6p4z4B4D4F6s5s5=6S6p5u634U6t5~2Y6a5U0*614)6k4W5}6H4;4$4@6,1=5A4~67695{5^5(6/595b6 5R6n5x604$6Y5i6(5|046#2=6%4m046G6V7a5A5!7f6E6d6f5K5M0s5O7j5Y5S7v7o5)6o7k662Y685D5y6}7A7e5{5-5/6$5{6U7B335u4(787P6.6M7a6}7i7R3v7l6`7G5s6}5H2f6g7s7u7$6l7x7=4y6r7^6@7D2=0;0n4a0A2u2V823_1o3{2x2z2v1V1X2x0u1F850n3`7 0T0V0X0b04.
Votre figure

Votre tracé sera ici

Point aléatoire dans un triangle

Le point \(P\), utilisé au départ de la construction, doit être choisi aléatoirement à l'intérieur du triangle \(ABC\). Nous allons pour ce faire calculer une moyenne pondérée des coordonnées des sommets.

L'idée est la suivante :

  • on se donne trois points \(A~\left(x_A~;~y_A\right)\), \(B~\left(x_B~;~y_B\right)\) et \(C~\left(x_C~;~y_C\right)\) ;

  • on choisit aléatoirement trois coefficients strictement positifs \(a\), \(b\) et \(c\) dont la somme est non nulle ;

  • les coordonnées du point \(P\) sont alors :

\[x_P = \frac{a\times x_A+b\times x_B+c\times x_C}{a+b+c}\\ \qquad\qquad\qquad y_P = \frac{a\times y_A+b\times y_B+c\times y_C}{a+b+c}\\ \]

Compléter le code ci-dessous afin de calculer les coordonnées du point \(P\).

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : /

.128013s3o_;bcdufvg»I/0lyq nABaêpS.r1L-meh,(P2=+C:twk«iDR*x)é050i0I0S0y0W0r0b0u0h0r0y0b0b0O010S0W0A010406050b0j0H0H0y0D0s040B0d0r0j0`0d0v0u020y0H0A0f0u0Y0I140D0t0j0I0b050p111315170 0A041v1C051F0p1F1H1C0 0i0W0l0/0;0?0^0J0W0m0J0r1V0J0S0}050*0g0r0I1Q0=0@011U1W1Y1W0S1(1*1$0S0g0d0i171%0D1D0S0J0/1a0b0A0y0v0^0N011,1S010k0,0I0v1i0I1$27292e1.2h1*2k0H2m040a0u0M0D0d0A0d0b0W1d1f0(250D0D0I0h2H1v2o0v1D0p232T0S2120220i2q0^1Y0v2j2E1$1N1P0:1-2%0W2)0v1}1O1$0A2M1D2R2T2~10281f2/2f2@0D140r0}0E2Q320~312p341.36380}0N3c292T2{0I2T2-2W0i2!2$010h1}2w0%1O1D3q2}3d3n2S053z0(3G3g1R3i0}0!0e0M3I040u3f333P0^0d0}0O3V3X2R3x0|040L3V3Y3x0v0}0y3)3;3h3#0}0Z3_3+3{013?043S0w3 323x3$040P473O2:420}0g4d3Z4f4a3~1w3d3*4841433S0x4j490}4c4o3o4q4e350}0h4w414m4H3!4g440e0Q3:404L3-0#4K4l0}0p4V2f3-3/4A3J4R4f433^4%3W3`4L4a4z2~4C4k4E044i4-4@4x4b4Z3Q044G4-4/4f4T3V0 4)4_0s3T503|043(4|554!0}4$305a514,4?5j1.4J5i5o0^435c465v4r4:4y5e4M4{5r5w015u5I5C4*0}5c4v5B4D5t5E5S4^51535M5T5f4n5!5X5x5P4O4Q5N5k044U5W4~4Y5=414#5-5#4M5q4p5s5f4=5 5J435H635.5U4 5^4L435Z3H5J574-0 0p3L3r1E2|1v3t1v0S3v6r2Y2U1|1~2W0y1)6m0p3t1B3N5)012M0H0e0k0y0U0I0e0J0c0}1n1p1r1t0u0R3:1I3e1C0X290.1*0.6M2G0b0K0u2@0j0.1c0,0W0b0I2B0v0.2J0V0u0l0D0+0.0n250I0k2h0h0W2j0S0.0y0r0$0y0S0d0W2M0b0C0u0Q0I0j0!0G7c0u0A7t0l7e0u0z2X1+0m0$0v0$0D0$0.280D0u0;0u0k1e2O0W1e3X6l3x1:1X1Z1#6G3=0}740v0i0d0H6!6l3W2j7S75290S6Y1E3e2-7!1Z1=1!2n680^2s2j2l0}2y0B0h0D0{7{0M0s231e3:3F3Y2 3H7=603y0E0}030u0o1j0d0D7{2J7R7T0v7V8k6i8r0U430k2B7:545J0T0}3X8P8542437,7.8O5n8V8R4.8U5|8K0}0W8y8A5F8X298Z58598V0h8t048v0F6X3z797b7d0v7f0u7h7j7l7n1t588r4+5F4a5h5(7*048Y7/5{6H4#5;2~8^5|659f3%8:7+8=9m8)9o5l9q3d9s6H6d9v5g9x9k9z8!6f8V9p9c6k3A3p6o6D3D6F0F0y7S7U2H3X9#0J2M0k1T1@0A0b0R0p6D0d0h7p0A8i0J1e0C8z0m0p8M0p0c0p1Y0g74160p9l0H0C1!0H0r03ac0Cac1$7Z417#827(9d9y7-9A309T3M1v0y3W2M0v0l7m1+0j1f2@0Ha81+051o049:7t7.0G977k7m2M1vaO251j8e0.7e2M4}41152G0J140S0I0!0}090L0q099E4B0L2=0:6?0#0u0)a*4La,23a/a;a?0L0Ea`3)0La;a 0#0C7}6j0(0*0,0b04.
Milieu d'un segment

Soit \(M\) et \(N\) deux points du plan de coordonnées \(\left(x_M~;~y_M\right)\) et \(\left(x_N~;~y_N\right)\). Ces points sont représentés en Python par deux couples de nombres (x_M, y_M) et (x_N, y_N).

Écrire la fonction milieu qui prend en paramètres les couples de coordonnées M et N des points \(M\) et \(M\) et renvoie les coordonnées du milieu de \(\left[MN\right]\).

x, y = coords

On rappelle que Python permet facilement de récupérer les différents éléments d'un couple de coordonnées en faisant par exemple :

Récupérer des coordonnées
>>> coords = (3, 5)
>>> x, y = coords
>>> x
3
>>> y
5
Entier \(\longrightarrow\) Décimal

Lorsque Python effectue une division, il considère toujours que le résultat est un nombre décimal (un nombre flottant dit-on en informatique).

C'est pourquoi l'expression (2 + 6) / 2 est évaluée à 4.0.

Exemples
>>> A = (0, 2)
>>> B = (3, 6)
>>> milieu(A, B)
(1.5, 4.0)
>>> C = (10, 4)
>>> D = (5, -8)
>>> milieu(C, D)
(7.5, -2.0)

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3o_bcdufvgM/ly napSr1me,(P2=4:+Ntwki5hx)6050h0y0I0s0L0o0b0q0g0o0s0b0b0D010I0L0t010406050b0i0x0x0s0v0p040u0d0o0i0+0d0r050n0=0@0_0{0:0t04141b051e0n1e1g1b0:0h0L0k0Z0#0%0)0N0L0l0N0o1u0N0I0.050U0f0o0y1p0$0(011t1v1x1v0I1D1F1B0I0f0d0h0{1C0v1c0I0N0Z0~0b0t0s0r0)0C011H1r010j0W0y0r0s0x0y1B1)1+1:1J1?1F1_1{0.0a0q0B0v0d0t0d0b0L110r0q0S1%0v0v0y0g2g141~0r1c0n1#2t0I1Z1Y1!0h200)1x0r1^2d1B1m1o0!1I2D0L2F0r1V1n1B0t2m1c2r2t2X0;1*2h2L1;2Q0v0^0o0.0w2q2#0/2!1 2%1J2)2+0.0C2/1+2;2r2C012_0s2,040c2}2s0:302@0)33350E382 2#313e0.0M3h3a3j3c320d2*340.0Q3h1d2V142J2w0h2A310g1V1|1c3C1f3A2Z152:053H0S2W3q1q1J0K0.0S0j3y3b3W0)0J0.0q3$3V2M320j0.0x0W0L0y0i3-2?3(010-040A3{2$3}0r0.0m42313 0z3h3,3%3/45040H483r3 0P0F3o0q4p4d3.2(0.0O0e473P2~2=433/4a4c4A3k0.0p4w4E4e1;0d0.0D4K4s2^464o4q4F3r4g4v4i4y2s4W3}4D4#044r3|4f4H0e4!2X4,4B4M4O4Q4-4t4h4U4p4%4.044v3?1x3_4`4@1J4N044P4*4?490.414*504|4v4x4=5j590.0G574G524:4j4(0.0P5s3r5a0n5A3}3?2{4~5e4X4/543^3`5d5o0)5a5c5n4L1J3 5h2Z5V3d4/5m2:5J3}5a5r5P5!324/4;3Q5.4l5E3/5C5^1;5G042|4*064q5)3/3Y042m0I0i0v135-4R0)5X5w51533@565i5?0.4b6c4{4S044I5M6k5Z6d3~5y3o143S0y2t2U6D3B1n3D2w2y2u1U1W2w0s1E6G0n3C0:6T0T0V0X04.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3o_bcdufvgM/ly napSr1me,(P2=4:+Ntwki5hx)6050h0y0I0s0L0o0b0q0g0o0s0b0b0D010I0L0t010406050b0i0x0x0s0v0p040u0d0o0i0+0d0r050n0=0@0_0{0:0t04141b051e0n1e1g1b0:0h0L0k0Z0#0%0)0N0L0l0N0o1u0N0I0.050U0f0o0y1p0$0(011t1v1x1v0I1D1F1B0I0f0d0h0{1C0v1c0I0N0Z0~0b0t0s0r0)0C011H1r010j0W0y0r0s0x0y1B1)1+1:1J1?1F1_1{0.0a0q0B0v0d0t0d0b0L110r0q0S1%0v0v0y0g2g141~0r1c0n1#2t0I1Z1Y1!0h200)1x0r1^2d1B1m1o0!1I2D0L2F0r1V1n1B0t2m1c2r2t2X0;1*2h2L1;2Q0v0^0o0.0w2q2#0/2!1 2%1J2)2+0.0C2/1+2;2r2C012_0s2,040c2}2s0:302@0)33350E382 2#313e0.0M3h3a3j3c320d2*340.0Q3h1d2V142J2w0h2A310g1V1|1c3C1f3A2Z152:053H0S2W3q1q1J0K0.0S0j3y3b3W0)0J0.0q3$3V2M320j0.0x0W0L0y0i3-2?3(010-040A3{2$3}0r0.0m42313 0z3h3,3%3/45040H483r3 0P0F3o0q4p4d3.2(0.0O0e473P2~2=433/4a4c4A3k0.0p4w4E4e1;0d0.0D4K4s2^464o4q4F3r4g4v4i4y2s4W3}4D4#044r3|4f4H0e4!2X4,4B4M4O4Q4-4t4h4U4p4%4.044v3?1x3_4`4@1J4N044P4*4?490.414*504|4v4x4=5j590.0G574G524:4j4(0.0P5s3r5a0n5A3}3?2{4~5e4X4/543^3`5d5o0)5a5c5n4L1J3 5h2Z5V3d4/5m2:5J3}5a5r5P5!324/4;3Q5.4l5E3/5C5^1;5G042|4*064q5)3/3Y042m0I0i0v135-4R0)5X5w51533@565i5?0.4b6c4{4S044I5M6k5Z6d3~5y3o143S0y2t2U6D3B1n3D2w2y2u1U1W2w0s1E6G0n3C0:6T0T0V0X04.
Figure complète

À ce stade, nous savons :

  • dessiner des points ;

  • placer un point aléatoirement à l'intérieur d'un triangle ;

  • calculer les coordonnées du milieu d'un segment.

Nous pouvons donc, en assemblant ces différents éléments, construire la figure souhaitée.

Quelques dernières remarques :

  • on propose d'utiliser les points \(A\), \(B\) et \(C\) de coordonnées \(A~(0~;~0)\), \(B~(500~;~0)\) et \(C~(250~;~433)\) mais vous pouvez utiliser d'autres points ;
  • la fonction milieu est déjà importée dans l'éditeur, vous pouvez directement l'utiliser ;
  • on propose de répéter le processus de construction \(20\) fois. Là encore vous pouvez modifier cette valeur.

Compléter l'éditeur ci-dessous afin de construire la figure souhaitée !

Rappel de l'algorithme de construction
Fixer le nombre de répétitions à 20

Créer les points A, B et C
Créer la liste des sommets contenant les points A, B et C
Dessiner les points A, B et C

Créer les coefficients aléatoires a, b et c
Calculer les coordonnées du point P initial
Dessiner le point P

Répéter "nombre de répétitions" fois :
    Choisir un sommet aléatoire parmi $A$, $B$ et $C$
    Remplacer les coordonnées de P par celles du milieu du segment [P ; sommet aléatoire]
    Dessiner le point P
Choisir un élément aléatoire

On choisira un sommet aléatoire en utilisant la fonction choice du module random :

# Import de la fonction
from random import choice

# La liste dans laquelle nous allons piocher
neveux = ["Riri", "Fifi", "Loulou"]

# Choix d'un neveu aléatoire parmi ceux listés dans « neveux »
neveu_aleatoire = choice(neveux)

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

.324.339.128013sô3_8èufv»Iy 7naS1me(P4C2:jtw«i][hE*)6o;bcdgM/T0làqABpQ.rL-R,}=+k%{95Jxé050T0w0E0s0H0Z0d0p0S0Z0s0d0d0;010E0H0(010406050d0j0v0v0s0+0o040t0P0Z0j1e0P0r0p020s0v0(0Q0p0.0w1o0+0#0j0w0d050W1l1n1p1r1j0(041P1W051Z0W1Z1#1W1j0T0H0l16181a1c0K0H0U0K0Z1?0K0E1h05110R0Z0w1.191b011=1@1_1@0E1 211}0E0R0P0T1r1~0+1X0E0K161u0d0(0s0r1c0B01231:010k130w0r1C0w1}2r2t2y252B212E0v2G040c0p0y0+0P0(0P0d0H1x1z0 2p0+0+0w0S2#1P2I0r1X0W2n2;0E2l2k2m0T2K1c1_0r2D2Y1}1+1-17242~0H300r2h1,1}0(2*1X2/2;3i1k2s1z362z3b0+1o0Z1h0p0u2.3m1i3l2J3o253q3s3u0B3x2t3z2/2}013E0s3t040p0f3I2:1j3L3C1c3O3Q0p0z3U3K3m3M3!3u0`3(3W3*3Y3N0P3r3P3u0O3/3A3n1/3D3@3F3R0q3|3X3 3Z413_3R0h453;473?3^3#0_4d3B4f3,040u0Y4k3~374g420u3w1Q3y3:4l4t4n0u3H4y3J4A4s3p493Q0u3T4G3V3}3+4L1h0u3%4P3)4B4K4h4U3.4X4I4S4#4o3{4(4R3=4D444.464C4T4o4c4?4e4^4+0u4j4|4Z404+0B4q524J54420B4x3i4)4:4_0B4F5e4/4m5h4O5k4@4!5b4W5p4}5r4a0B4%5u5348554-3k1$3g1P342@0T2{3M0S2h2Q0~1,1X3f0w3h3y3(055O0 5W5B3N1h0r0R0g2X390E1O4X0p5l4t0P1h0;3(5=5q250v0H1h563/5f4f0S0u1h030p0,222^0H2t0U210p2%0R190w4r3+1h0$5{5?2z5^045`5;6s251g040x5Y5}1c5 1h573k6E016A0/6r6K6G046I5X6K6A0N6n4:1h0%6O5v256u6w3i5|6$1c6A6C4X6y6F60040`0Y6S3J6;6L1h6N6x6P6?6`2:6|6V6X4m1h0A6#5%6(7b596-1h6/6J6,016Q5y735$7f6}046 6*6|6Q0z0f5o6T7k76586o040d0P1n105:7u6K7d707B1h0J6D7k0r6p7S5%6M7e7E6!6:6U6~7Z6Y047a7$7P040I774C1h0 1a390w5,0P5.7W7q6.7~7E6q7-7X1h6W7D7*7@2Z307{7}847 7h817*7#7j8504875A7q7U048a7_8d0r0E8i4f808f7E7,8l8g8n636|66686a225-8w0p392!6e0Z0p3P0}0s0E7|2*7;3p1h0s7)4f7N7L7T1h0+2t0T7H8y4t6.8o4z6|8r0R8)5@5_8~8$048/0r8;0v8?2z8^8#3D1h0S916%907O5%8r9496986z7h8_4H8{1h0|0g838E3M7Y9i8q1h0o9v9f1c8+3y6+9j7V8878049u8k7A8m7t9I9s049D9Q3J9J7q9H9Z9V9Y4Q6K8r9u8D9R8F9T9%9+9C0g9.9=7k9$2:9!8C9b3Z1h0y9F019|3R757h7i9/7E8(9A3M6u0Ma49,9Eae3=6u0=ai1h8}al8*1hahas7=9O0g9)a77M1haoaw929eaF9g04av8,9Kay9_747%8GaI9G1h0Wa48A9x7*adaM9#aDap04ara$afa(aT5(04aHaZ8z869;9}a86B9na104a#9UaCaKa)9D9wb19{a.a,7*a+b77caub4aza4ana)a=bda%b3a/8r9DaP7p9y86biaVaX8h8Ba!bw04aEba9Nbc9`bebDbka}7r0N9q9*8-8s1N8b7`8N8xbAa@a|bYaxa3b#99bv4(644t8J04696b153N5+bW0d2xb^0p1l0S0SbT0H0k7K8`6K0?1h0k3@a)0rbi0F1h39ai0R8.6f6mb(9ob!a?ax5*8v5/bM6V0C3/0pcx9~7*7G7I0E0g3P0w8X8ZckbF8 6vbk0K7|b ctbzco92cB2Pcscl7gaS5ecycz9Nb%cK6t9hc*9c045 1_0w0jcRcnab7*c)c_bZa_aBbRcV10cE21cH0H8!cYbNcwcy9V8t8cbWc@aa6{9?04c{di7.bP3z0W5!5V1Y5H0W5J1P0E5Ldx2_2=2g2i2@0s20dsdv5S1Vbt3=2*0v0g0k0s0?7`0K0f1h1H1J1L1N0pcv6:1$3z1W0,0s0p2B0U0j2*0p0P0R0E2D1M0p2*1a1IdHd.3@d_2P8O0s0j5=d-0K2*0k1;2b0(0d0C0W0W0k0+0*0F0H0?1f0w1+0s0*3@0U0Wenep0W0X0+6e0r6g7`0 0g0t0H0w0+0(0H0@0A0`0@0h0z0dep2x110+0U101c0g202tc61X1I046d6f6h2%eJeLeN0aeV0o1Pe,1P0s040*1Yd*046b0p3f0Pb 1a0j152%5O0r0d2^0j2,0H1y0pd!0p3bfa0p0l31fe6i22cW2^222D0p0b0j0ld=0d000s0(0(0w0Z6h6h05e9ebed0EefehejeleyeqeseueZexeo0H0W0{c=0g0T0j0g0S0K0s320peYe!0Ee$e(0re*0Dc=6ie7f:f=5:e~0*0p0n8T1N0Ef52Y2Ze02%6he4eL0p0!f51p1e0+fugd0Z0o0U1yd#5O1D118O0j1z3b0v0Rd=d!0Zfdfmfc0e0E0}0df0d)dLeJ16220SgN0}0pgbfn0PgOc%4t1p2!0K1od_0|1h090x0r09do0/8U0Z3@0dg`0(18b gqgmg3fm0}11fJ0p6hfofre6gd5.g)2zg+2ng.0wg:04g=0yg^5{he6|hjg-8Xhmg;0x090Tek0s0S0^0r0:hG0=0f0:hr4X0-0H0i2Pg1b|0w0Ue4gcfJ3r106i00d@d_0rd60pgC220G0p0D1ueK0p0md.1?d;0wg70y0Pd;hh25hvhlhng=2u0fhN3ig`fk2*2^h fr0p0ReK1zgi13eKe70Ci11ci3hxi5hAhC8/hFhL0^0fhK0:0;hBhD660Bi93ygR1)1!2;1Zb 8weL3zd-3=6g1`2f0Pg:6i8X0s0-0E0ofJ1c0H1oe!2x0Ti$0-en0T2nir1w5^i#110-0K0wiXi`8Y2xea0wec26eeegeidr0|0*c8eZh|fHef0*erfh8Xfj0rjf0+ej0Hf:eK0+0d0WhmeL0Sju1N2=eCe/7`0v0offeL0w1$0o2n1yjyhm0P0ge.eE210g0l0HeH0.0L0V0Wi-0se!jy0z0*0d0l0Ui:i=7@0S0-2X2Z2#1c2g2b7H1}i-0Ug{f`010)0j8Xd=gXgOb_b|0+0SfRfTjc5Pjejge!0*jjgQjm0Sjo1yjrjtjveLjS0|jBjDjyjWeF0gjJjL2*jOjQfejz0|jUkGjYj!j$j(j*i.jEj/j;j?0pi@i_010f0Y0@1}0We~e83MiW2a2gi!i;i~i)i+01j+i/i}i%k(0Kj3i|k`i%j0j201e6j40pj6j81{fSjbdqkmjfevjifIksf-ku2#kx2BkzjxkPkDf8jFeDkHkJd_kL0(jPcOkOjTjVjGjX7`kU7`j%j)k jE0`j:j=j@i~j_j{2Y8R1yj g%8Y0vk30vk53Pk70A390#16gYkf0dkhkjljjdlmjhkqlpjllrkvjqekky1=kAlykhkElBjHkIjKlFjNlHkNkBkRlNkHlQ0glSkXj,lVlXk$l31ck+k-2;k:fOk=291{k^lZi%k|0wi,kYmLi?j#k)lcl6i=l92al5j5fQj9lifUm0kolojkktm7lujumblxjAmelAkSjImjjMkMlJmolMlCkTj#lRkWlUjy0OmymRl#j|l(2u01k0l,l.l:0Zk7eJ0|l_ke2xl|kim%kklk0 knlnm3m-m6ltm9lvm=kBlzjEm`mikKmllIjRkPmpn2lPn4mtn6kYn8nak%mTl4k*k,k.e~1jdq2DlF5TiOdp0 11130d04.
Votre figure

Votre tracé sera ici

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

.324.339.128013sô3_8èufv»Iy 7naS1me(P4C2:jtw«i][hE*)6o;bcdgM/T0làqABpQ.rL-R,}=+k%{95Jxé050T0w0E0s0H0Z0d0p0S0Z0s0d0d0;010E0H0(010406050d0j0v0v0s0+0o040t0P0Z0j1e0P0r0p020s0v0(0Q0p0.0w1o0+0#0j0w0d050W1l1n1p1r1j0(041P1W051Z0W1Z1#1W1j0T0H0l16181a1c0K0H0U0K0Z1?0K0E1h05110R0Z0w1.191b011=1@1_1@0E1 211}0E0R0P0T1r1~0+1X0E0K161u0d0(0s0r1c0B01231:010k130w0r1C0w1}2r2t2y252B212E0v2G040c0p0y0+0P0(0P0d0H1x1z0 2p0+0+0w0S2#1P2I0r1X0W2n2;0E2l2k2m0T2K1c1_0r2D2Y1}1+1-17242~0H300r2h1,1}0(2*1X2/2;3i1k2s1z362z3b0+1o0Z1h0p0u2.3m1i3l2J3o253q3s3u0B3x2t3z2/2}013E0s3t040p0f3I2:1j3L3C1c3O3Q0p0z3U3K3m3M3!3u0`3(3W3*3Y3N0P3r3P3u0O3/3A3n1/3D3@3F3R0q3|3X3 3Z413_3R0h453;473?3^3#0_4d3B4f3,040u0Y4k3~374g420u3w1Q3y3:4l4t4n0u3H4y3J4A4s3p493Q0u3T4G3V3}3+4L1h0u3%4P3)4B4K4h4U3.4X4I4S4#4o3{4(4R3=4D444.464C4T4o4c4?4e4^4+0u4j4|4Z404+0B4q524J54420B4x3i4)4:4_0B4F5e4/4m5h4O5k4@4!5b4W5p4}5r4a0B4%5u5348554-5A595C5b4=5F4*5b4{3k1$3g1P342@0T2{3M0S2h2Q0~1,1X3f0w3h3y3(055X0 5)5B010?0r1h0k2V0v5+5q250F3u5{5v3D5?040+2t0T0P5`4X5l4t5~3R605:5=1h0H1D3@0E3(0p6b3p1h0S0K0P0H0S0w6f5G011g040/6n6p3D1h650r67695e5f4m1h0r0R0g2X390E1O4X6o5|1c0P1h0;6E6Z010v0H1h563/6N4t0S0u1h030p0,222^0H2t0U210p2%0R196x583+1h0$6(616!6$7a5:6B0x6y3M6+1h573k6)6B6D6X6F1c7k047m5*7o1h0N4r77040%7e6z6#046%7r7y047h6a6)7u0`0Y7w3J7s6A1h7q3i6Y7b6*6,7v7i3=6B7A764:1h0A7F3M7H7J7Z7V7g7)4f7u5y7T2:7_7X7;3=7u0z0f5o7x7#7+7B7.040d682P6V834f7?8j4t6B0J7{4C788q2z7p8m6q7D8t258v7K7#637:7O8a1h0I8c6O040 1a390w6S6u0r6m8G7f1h7N7n8D8s8V6z8b7-8L8N2Z308R6U8z1c7`8$7C7E8?7*7z8K8r8M1N8,8Q6T8T8:7W7M948E948(6M7V6=6@6_22920E0p392!6}0Z0p3P0}0s0E6u2*8|8x0s8w258l8C5:636I6K998X7,5K8d0R9y7c7I9M3N6H66689G7M9I4z7V630S9P9A7^6)9D9S6L898W9V9v6G040|0g798_4f8B9%8!040o9?9#7d9B6z639@9J8L9=8^8Z9-7Y3y7!9C1h9~a9ad7V9$aj9(1hai4H9Y1h9=8Faa8%82a27C9~auam7#al3Jaea37/9/3Z1h0ya09Oay8`7M8Y9,aH049xaP8k1h0M9P639=a5aC5:7H0=a#1h9LaX4t7Ha!a:8xa8aNa,a@9:9!a|9Na?9{af9;0gaB7U7L9WaFak1h0W9P8=av7CaWb27G1ha{bj7Ca/bn3=a+a-04a~bgaQ0Nacba7LaSb79|bia)bk04b1bGaz9 a 01bsbN63bpbKbraZbtaha`btbvbTaYbIbWb59Ub92:aG7=bcbe8X971hbFbAaDblbtbSb^a*b`bQ6rb*b+4YaU8+8P8.939^8nb;ca8xaMcd8A8{4(6:2z9d046^6`153N6R9h0d2xct0p1l0S6w8O0k6Wa64t0?5@3@bt0r9#6d39a#0R9R0r0U75bw9_cccU8}6Qc88icg8;7z0C3/0pc+b-8d8f1n100g3P0w9r9tcTb#a;a1bq8L6s6u6w9UbC80an8e8g10cDaT3M9a4zc,c-8Lcfc~c|aOdj8x6+1_0w0jd3b=04didbaQbzb,ard7c:0Ec=21c^0H9uc$95c306dfdAc68-9hdsdJ63dvbD9-dL1P5-5(1Y5Q0W5S1P0E5Ud*2_2=2g2i2@0s20d#d(5#1V5/6z2*0v0g0k0s0?8Q0K0f1h1H1J1L1N0pc)6a1$3z1W0,0s0p2B0U0j2*0p0P0R0E2D1M0p2*1a1Id@ek6l1I2D9i0s0j6oej0K2*0k1;2b0(0d0C0W0W5^0*0F0H0?1f0w1+0s0*3@0U0WeVeX0W0X0+6}cR210g0 0g0t0H0w0+0(0H0@0A0`0@0h0z0deX2x110+cS0E1c0g202tcG1X1I046|6~702%e^e`e|0af40o1Pfh1P0s040*1Yeg046`0p3f0PcA1l152%5X0r0d2^0j2,0H1y0pea0p3b0j150l31fL71228h2^222D0p0b0j0leo0d000s0(0(0w0Z707005eIeKeM0EeOeQeS0+eUeWeYe!e$f8e)g60W0{dqe=0j0g6s0s320pf7f9fbfd0rff0Ddq71eGgj2Yfvfx0p0n9n1N9i2X8Oez2%702P300+0p0!fD1p1egN2%2X0Z0o0U1yeb5X1D118T0p0j1z3b0v0Reoea0ZfKfTfJ0e0E0}0dfyefd{e^16220Sg^0}0pgEfU0Pg_dg4t1p2!0K1oes0|1h090x0r09c30/9o0Z3@0dho0(186wgNgPgjfT0}11f@0p70fVfYeFfD8S9i7Vhc2nhf0whh04hj0yhm6nhIhMe.hO9rhQhi0x090T5^0s0S0^0r0:h.0=0f0:hV4X0-0H0i2Pgvcx0w0UgLgFe`8h7100eqes0rdHg)300p0G0p0D1ue_0p0mek1?en0w0*2T0Penha2zhNheh#hRhj2u0fh^3ihofR2*2^isfY0p0Re_1zgK13e_eG0Ciu25iwhPizh(h*65h-h?0^0fh=0:0;h)h+6=0BiD3yg|1)1!2;1Z6w8Te`3zej3=6 1`2f0Phh719r0s0-0E0of@1c6j0scS2x0Tj70-eV0T2n1ceF9sjhjj0K0wj2jo1w6#0peJ0weL26eNePeRd!0|0*0ke%ipf=eO0*eZfO9rfQ0rjJ0+eS6v1=e`0d0WhQe`0S6v1N2=e.fk8Q0v0ofMe`0w1$0o2n1yj#hQ0P0gfje:8QiIfW0g0.0L0V0WjecSj#0z0*0d0l0Ujr110-8N0S0-gG9l1y1c2g2b681}6j0Uhpfa010)0j9reoh2g_cucx0+0Sf g1jG5YjIjKf8jMf?g{jQ0SjS1yjVjX6se_0+j|0|j(j*j#k06 j/j;es2*j^j`fLj$0|j~k-e;k30dk5k7k91okb0Wkdkfkh0pjljn010f0Y0@1}0WfweH3Mj12a2gj5jikjjajc01ka2Gj6kjla0Kjwjqlwj8jtjv01jpjyjAjC1{g0jF0WjHjJjL0*jNkU0TjR2#kZ2Bk#j!k_k*cAj,e/k.0gj:j=k=0(j_6tk^j}j j-k1l^isk k6k8luj#0`kekgkij8klkn2Ykp2u01ks9s0vkv0vkx3Pkz0A390#16h3kH0dkJkLlNlPkQcSlSkTjPlVkWlX5^k!jZk%l$kJk+l)j.l,k:j?k?l=k(k{l_l+k~l0l l3j+m2l72xly1cldlf2;lif|lk291{lnm5j9jb0wjdmZm?m(lGjxm?lE2alAlIf~jDlMg2mvlRlTmAlWjTlYjYk$k(l%j+k|k/l.j@l:k@mSl^l*k}2Vk4l~l2jfj+0Om3l8lpm61Nkmko2#krh8memgmi0Zkze^0|mokG2xmrkKn6kMlOkOlQkRmyjOkVkXjUmElZmGnimJl(nlmNnnmQj{k_mTntk2nvl}l1m00WnBm$l90Hjmlzlclelgfw1jlOeDi}i^fzoe0 11130d04.
Votre figure

Votre tracé sera ici