Pythagore, c’est utile !

Comme tout le monde, vous avez eu, tôt ou tard, des cours de mathématiques. Et comme tout le monde, vous vous êtes un jour dit que les maths ne vous servirait à rien dans votre métier et votre vie future !

Parmi tous ces trucs qui semblaient inutiles, il y en a au moins un que vous n’avez pas oublié : le théorème de Pythagore. A quoi ça pouvait bien servir de savoir que le carré de l’hypothénuse de ce fichu triangle rectangle était égale à la somme des carrés des deux autres côtés ?

Figurez-vous qu’il y a quelques temps, je réalisais une petite application géographique avec l’aide de l’API Google Maps. Le but du jeu était de trouver, dans une base de données d’une centaine de points identifiés par des coordonnées en x et y, les trois points les plus proches d’un point donné.

Il a donc fallu calculer les distances entre le point donné et chaque point de la base de données et d’en extraire ensuite les trois plus petites.

Et devinez quelle est la meilleure méthode pour calculer la distance entre deux points dans le plan ? Pythagore bien entendu !

Voyons ce que ça peut donner algorithmiquement parlant (en JavaScript) dans un exemple simple.

Soit un tableau de plusieurs points identifiés par un label, la latitude et la longitude :

var cities = [
     {label:"Brussels", lat:"50.848385", long:"4.349685"},
     {label:"Paris", lat:"48.860001", long:"2.34"},
     {label:"London", lat:"51.52", long:"-0.1"},
     {label:"Amsterdam", lat:"52.373120", long:"4.893195"},
     {label:"Berlin", lat:"52.52", long:"13.38"}
]

Nous souhaitons trouver, parmi ces cinq villes, la ville la plus proche de la ville de Dunkerque dont les données sont enregistrées dans la variable suivante :

var my_city = {label:"Dunkirk", lat:"51.036995", long:"2.37693"}

Voici l’application du théorème de Pythagore :

var distance = Number.MAX_VALUE, label, current_distance;
for (var i=0; i<cities.length; i++) {
     current_distance = Math.sqrt(Math.pow(my_city.lat-cities[i].lat,2)+Math.pow(my_city.long-cities[i].long,2));
     if (current_distance<distance) {
          distance = current_distance;
          label = cities[i].label;
     }
}

Math.sqrt sert à réaliser une racine carrée et Math.pow une puissance.

Vous n’avez plus qu’à afficher le contenu de la variable label pour découvrir la ville la plus proche de Dunkerque.

alert('La ville la plus proche de Dunkerque est : ' + label);

Voilà une très belle application d’un bête théorème appris lors de nos bons vieux cours de mathématiques. Tout ça pour vous prouver que ce qu’on apprend à l’école, parfois, ça peut servir !

5 Comments

  1. Damien's avatar Damien says:

    Intéressant 🙂
    C’est le genre de truc dont on a vraiment aucune idée des applications possible quand on l’apprend, si on faisait du Javascript au collège ça aiderait ^^ 😛

    Like

  2. Matou's avatar Matou says:

    excellent…

    Like

  3. Marin's avatar Marin says:

    heuu la méthode distanceFrom() de la classe GLatLng fait la même chose non? :p

    Like

  4. Vinch's avatar Vinch says:

    Possible, mais la méthode reste toujours utile pour ceux qui n’utilisent pas l’API Google Maps.

    Like

  5. jimmy's avatar jimmy says:

    aussi par exemple pour ceux qui doivent travailler non pas avec Javascript mais avec une table SQL, par exemple, contenant tous les codes postaux de Belgique et un couple latitude-longitude.

    le principe reste tout à fait le meme, donc c cool d’en avoir parlé.

    Like

Leave a reply to Vinch Cancel reply