Calculer distance euclidienne

Fermé
jj1k Messages postés 30 Date d'inscription jeudi 8 juin 2017 Statut Membre Dernière intervention 3 septembre 2017 - 23 juin 2017 à 14:16
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 23 juin 2017 à 22:50
Bonjour

j'ai un fichier txt qui contient une liste des villes à partir des coordonées X et Y je veux calculer la distance euclidiene entre tou les ville



comment je peux le faire ?
Merci
A voir également:

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
23 juin 2017 à 19:32
Bonjour,

Rien de nouveau par rapport à tes autres discussions, tu lis ton fichier texte ligne par ligne, tu map avec des objets représentant chaque ligne et tu agrèges les résultats...

import java.awt.Point;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;

class Ville {
    final int id;
    final double x, y;

    Ville(String str) {
        String[] tab = str.split(",");
        id = Integer.parseInt(tab[0]);
        x = Double.parseDouble(tab[1]);
        y = Double.parseDouble(tab[2]);
    }
}

class Parcours {
    final int a, b;
    final double distance;

    Parcours(Ville a, Ville b) {
        this.a = a.id;
        this.b = b.id;
        distance = Point.distance(a.x, a.y, b.x, b.y);
    }

    public String toString() {
        return String.format("(%d,%d)=%f", a, b, distance);
    }
}

public class Test{

    public static void main(String[] args) throws Exception {
        List<Ville> villes = Files.lines(Paths.get("C:/test.txt")).skip(1)
                .map(Ville::new).collect(Collectors.toList());
        List<Parcours> parcours = villes.stream().flatMap(a ->
                villes.stream().map(b -> new Parcours(a, b)))
            .collect(Collectors.toList());
        System.out.println(parcours);
    }
}

Ce qui donne (en considérant les 3 premières villes du fichier)
[(0,0)=0,000000, (0,1)=5,301141, (0,2)=9,036998,
(1,0)=5,301141, (1,1)=0,000000, (1,2)=14,021260,
(2,0)=9,036998, (2,1)=14,02126, (2,2)=0,000000]

On peut éventuellement supprimer les couples inutiles en rajoutant un
filter(b -> a.id < b.id)
pour obtenir :

[(0,1)=5,301141, (0,2)=9,036998, (1,2)=14,021260]
0
jj1k Messages postés 30 Date d'inscription jeudi 8 juin 2017 Statut Membre Dernière intervention 3 septembre 2017
23 juin 2017 à 22:33
Merci
mais comment je peux récupérer les résultats (les distances) dans un fichier txt ?
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015 > jj1k Messages postés 30 Date d'inscription jeudi 8 juin 2017 Statut Membre Dernière intervention 3 septembre 2017
23 juin 2017 à 22:50
Une fois que tu as ta List<Parcours> tu en fais ce que tu veux, l'afficher comme je l'ai fait ou l'enregistrer dans un fichier ou tout ce que tu veux...

try (PrintWriter pw = new PrintWriter("C:/result.txt")) {
    parcours.forEach(pw::println);
}
0