Différentes distances

Il existe en mathématiques et en informatique de nombreuses façons de calculer la distance entre deux points, cet exercice en étudie trois particulières.

Points A et B

Dans chaque question on étudie une distance différente. On demande à chaque fois d'écrire une fonction prenant en paramètres quatre nombres x_A, y_A, x_B et x_B correspondant aux coordonnées de deux points. Cette fonction renvoie la distance décrite.

assert ?

Le mot clé assert est utilisé en Python afin de vérifier que des propositions sont vraies.

Ainsi, l'instruction assert 3 + 5*7 == 38 permet de vérifier que l'expression 3 + 5*7 est bien évaluée à 38.

Si c'est le cas, le programme continue de se dérouler normalement. Dans le cas contraire, le programme est interrompu et une erreur est signalée.

La vidéo ne s'affiche pas... ?

Il peut arriver que les vidéos ne s'affichent pas sur des navigateurs basés sur Chrome, ou si un ad-blocker est activé sur le navaigateur. Essayer avec un autre navigateur si vous êtes dans ce cas (FireFox, typiquement), ou désactivez l'ad-blocker.

1. Distance de Manhattan

C'est la distance parcourue « en suivant les rues » dans le quartier de Manhattan. Elle vaut \(12\) dans la figure ci-dessous, quel que soit le chemin suivi :

Distance de Manhattan

On la définit comme la somme des « écarts » entre chaque paires de coordonnées des points :

\[\mathrm{manhattan}(x_A,\,y_A,\,x_B,\,y_B) = \lvert x_B - x_A \rvert + \lvert y_B - y_A \rvert\]
Valeur absolue ?

Avec Python, on calcule la valeur absolue de \(a\) en faisant abs(a).

Exemples

En prenant \(A(2\,;\,-5)\) et \(B(-3\,;\,1)\) :

>>> xA, yA = 2, -5
>>> xB, yB = -3, 1
>>> manhattan(xA, yA, xB, yB) 
11

En prenant \(A(2\,;\,2)\) et \(B(2\,;\,2)\) :

>>> xA, yA = 2, 2
>>> xB, yB = 2, 2
>>> manhattan(xA, yA, xB, yB)
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

.128013sobcdufvg/ly nABapSr1-me,(P2=+:twkihx)050f0y0G0r0J0l0b0n0e0l0r0b0b0D010G0J0s010406050b0g0x0x0r0u0m040t0c0l0g0%0c0o050k0.0:0=0@0,0s041017051a0k1a1c170,0f0J0i0V0X0Z0#0K0J0j0K0l1q0K0G0*050Q0d0l0y1l0Y0!011p1r1t1r0G1z1B1x0G0d0c0f0@1y0u180G0K0V0`0b0s0r0o0#0C011D1n010h0S0y0o0r0x0y1x1#1%1,1F1/1B1=1@0*0a0n0B0u0c0s0c0b0J0}0o0n0O1Z0u0u0y0e2c101`0o180k1X2p0G1V1U1W0f1|0#1t0o1;291x1i1k0W1E2z0J2B0o1R1j1x0s2i182n2p2T0-1$2d2H1-2M0u0;0l0*0v2m2X0+2W1{2Z1F2#2%0*0C2+1%2p2Q0y2p2F2s0f2w2y010e1R1^182 1b2R2.2o2_3d350O2S2X330I0*0O0h3e3i2/1m1F0H0*0n3p3c330o0h0*0;0o0K0r1L1%3x2n330)040A3J3j2:0#0o0*0L0p3P3r2I013M0z3p3w3K3R013T040m3W112,3y3*3#3%3=3s3S3U0q3X2Y3`3!0*3$3:2`3(3Q403,0m3}443d3)403M0M0F3p060n4l463Y1-3l042i0G0g0u0 4c044n3 3Z0o0d0*0r0d0b3~3L0*3O4x3_4B3|3^4e3Z0c0*0w4Q474O043V4I3?0*0M4W4o1F4T040E4)4A2!4D044F4H4M4R1-3M4L2V4`2;0*4a4/334,4V4x4z3z513/4~4X4{4%4j103g2}193b0k392q31102t2s1Q1S2s4F1B2~1j2-5m0P0R0T04.
2. Distance euclidienne

C'est la distance classique du cours de mathématiques (dans le cas où les axes sont perpendiculaires et de même échelle).

Distance euclidienne

On la calcule à l'aide du théorème de Pythagore :

\[\mathrm{euclidienne}(x_A,\,y_A,\,x_B,\,y_B) = \sqrt{(x_B - x_A)^2+(y_B - y_A)^2}\]

Afin de simplifier les calculs, on utilisera ici le carré de la distance euclidienne :

\[\mathrm{euclidienne\_carrée}(x_A,\,y_A,\,x_B,\,y_B) = (x_B - x_A)^2+(y_B - y_A)^2\]
Carré ?

Avec Python, on calcule le carré de \(a\) en faisant a**2.

Exemples

En prenant \(A(2\,;\,-5)\) et \(B(-3\,;\,1)\) :

>>> xA, yA = 2, -5
>>> xB, yB = -3, 1
>>> euclidienne_carre(xA, yA, xB, yB) 
61

En prenant \(A(2\,;\,2)\) et \(B(2\,;\,2)\) :

>>> xA, yA = 2, 2
>>> xB, yB = 2, 2
>>> euclidienne_carre(xA, yA, xB, yB)
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

.128013so_bcdufvg/ly nABapSr1-me,(P2=+:twkih*x)050g0z0H0s0K0m0b0o0f0m0s0b0b0E010H0K0t010406050b0h0y0y0s0v0n040u0c0m0h0)0c0p050l0:0=0@0_0.0t041219051c0l1c1e190.0g0K0j0X0Z0#0%0L0K0k0L0m1s0L0H0,050S0e0m0z1n0!0$011r1t1v1t0H1B1D1z0H0e0c0g0_1A0v1a0H0L0X0|0b0t0s0p0%0D011F1p010i0U0z0p0s0y0z1z1%1)1.1H1;1D1@1_0,0a0o0C0v0c0t0c0b0K0 0p0o0Q1#0v0v0z0f2e121|0p1a0l1Z2r0H1X1W1Y0g1~0%1v0p1?2b1z1k1m0Y1G2B0K2D0p1T1l1z0t2k1a2p2r2V0/1(2f2J1/2O0v0?0m0,0w2o2Z0-2Y1}2#1H2%2)0,0D2-1)2r2S0z2r2H2u0g2y2A010f1T1`1a311d2T2:2q2{3f370Q2U2Z350J0,0Q0i3g3k2;1o1H0I0,0o3r3e350p0i0,0z0h0Y0K1k1?2D0d0f0@2k3z2p350+040B3Q3l2=0%0p0,0N0q3W3t2K013T0A3r3y3R3Y013!040n3%132.3A3;3,3.3|3u3Z3#0r3(2!413+0,3-3`2|3/3X473?0n444b3f3:473T0O0G3r060o4s4d3)1/3n042k0H0h0v114j044u463*3T3V4E403*3?0N4i2V4G350c0,0x3 4l4N3#3_2X4Y1/4n454T0,0M0M4*3;0y0K2_4X4e3*4U040F4@4v1H4J4/4f0,4h4}4H1/4`4W4E4S3;4g4#3{4%4 0,0O514_4,4.4L5g0%4;4?4E0.0l3i2 1b3d0l3b2s33122v2u1S1U2u0s1C5x5A1l2/5A0R0T0V04.
3. Distance de Tchebytchev

Aux échecs, le roi peut se déplacer d'une case à la fois dans toutes les directions.

Combien de coups lui faut-il pour atteindre une case donnée ? La réponse est donnée par la distance de Tchebytchev.

Sur la figure ci-dessous, les cases marquées sont toutes accessibles en \(2\) coups.

Distance de Tchebytchev

Cette distance est égale à l'« écart » maximal entre les coordonnées de chaque point :

\[\mathrm{tchebytchev}(x_A,\,y_A,\,x_B,\,y_B) = \max (\lvert x_B - x_A \rvert ,\,\lvert y_B - y_A \rvert)\]
Maximum ?

Avec Python, on calcule le maximum de deux nombres a et b en faisant max(a, b).

Exemples

En prenant \(A(2\,;\,-5)\) et \(B(-3\,;\,1)\) :

>>> xA, yA = 2, -5
>>> xB, yB = -3, 1
>>> tchebychev(xA, yA, xB, yB)
6

En prenant \(A(2\,;\,2)\) et \(B(2\,;\,2)\) :

>>> xA, yA = 2, 2
>>> xB, yB = 2, 2
>>> tchebychev(xA, yA, xB, yB)
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

.128013sobcdufvg/ly nABapSr1-me,(P2=:twkihx)050f0y0F0r0I0l0b0n0e0l0r0b0b0D010F0I0s010406050b0g0x0x0r0u0m040t0c0l0g0$0c0o050k0-0/0;0?0+0s040 1605190k191b160+0f0I0i0U0W0Y0!0J0I0j0J0l1p0J0F0)050P0d0l0y1k0X0Z011o1q1s1q0F1y1A1w0F0d0c0f0?1x0u170F0J0U0_0b0s0r0o0!0C011C1m010h0R0y0o0r0x0y1w1!1$1+1E1.1A1;1?0)0a0n0B0u0c0s0c0b0I0|0o0n0N1Y0u0u0y0e2b0 1_0o170k1W2o0F1U1T1V0f1{0!1s0o1:281w1h1j0V1D2y0I2A0o1Q1i1w0s2h172m2o2S0,1#2c2G1,2L0u0:0l0)0v2l2W0*2V1`2Y1E2!2$0)0C2*1$2o2P0y2o2E2r0f2v2x010e1Q1@172~1a2Q2-2n2^3c340N2R2W320H0)0N0h3d3h2.1l1E0G0)0n3o3b320o0h0)0F0e0J0y0d0m3D0y0i3w2m320(040A3L3i2/0!0o0)0K0p3R3q2H013O0z3o3v3M3T013V040m3Y102+3x3,3%3)3@3r3U3W0q3Z2X3|3$0)3(3=2_3*3S423.0m3 463c3+423O0L0E3o060n4n483!1,3k042h0F0g0u0~4e044p413#0o0d0)0:0K403N0)3Q4z3{4D4F040r0d0b4J3^4L4V4a3~3`4g3#0c0)0w4#494D3W3;2U4$1,4i452S4B3y4Q4S4U4N4;1E3O4M4:4,2Z0)4c4+4q1E4(044*4z4_3,4b4/3?4 0!4i0L4l0 3f2|183a0k382p300 2s2r1P1R2r4S1A2}1i2,5u0O0Q0S04.