1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
| import java.util.Arrays;
public class DechargeEssai {
public static void main(String[] args) {
int [] coordonneesHabitations = {9, 30 ,18, 8, 3, 18, 25 , 36 };
System.out.println("la position dans le tableau du point le plus proche est : "+plusProche(10, 15, coordonneesHabitations));
System.out.println(Arrays.toString(troisPlusProches(10, 15, coordonneesHabitations)));
System.out.println(Arrays.toString(meilleurPlace(10, 15, coordonneesHabitations)));
}
//calcule de la distance de 2 points avec pythagore
public static double calculerDistance(int x1, int y1, int x2, int y2){
return Math.sqrt((x1 - x2)*(x1 - x2)+(y1 - y2)*(y1 - y2));
}
//calcul du point le plus proche du point (x,y)
public static int plusProche(int x ,int y ,int[]coordonneesHabitations) {
double min = Integer.MAX_VALUE;
int position = 0;
// on cree une boucle avec pour index un couple de coordonnées => couple(x = index,y =index+1) donc on parcours la boucle au pas de 2
for (int index = 0; index < coordonneesHabitations.length-1; index+=2) {
int xcoor = coordonneesHabitations[index];
int ycoor = coordonneesHabitations[index+1];
//on cree une variable distanceMini avec la méthode calculerDistance
double distanceMini = calculerDistance(x, y, coordonneesHabitations[index],coordonneesHabitations[index+1]);
// condition pour trouver la plus petite distance
if(distanceMini < min) {
min = distanceMini;
position = index;
}
}
return position ;
}
//la méthode doit renvoyer un tableau des 3 habitations les plus proches des points(x, y)
public static int[] troisPlusProches(int x, int y, int[]coordonneesHabitations ) {
//tableau qui doit être retourné avec 3*2 coordonnées = 6
int []resultat = new int[6];
//on fait une copie du tableau coordonneesHabitations pour ne pas le modifié
int [] temp = new int [coordonneesHabitations.length];
System.arraycopy(coordonneesHabitations, 0, temp, 0, coordonneesHabitations.length);
//on cree une boucle pour parcourir temp a la recherche de la plus petite distance avec la méthode "plusproche"
for (int index = 0; index < resultat.length; index+=2) {
//on recherche le plus petite distance
int position = plusProche(index, y, temp);
// on la stocke dans resultat
resultat[index] = temp[position];
resultat[index+1] = temp[position+1];
//on met des valeurs éleves à celle ci pour ne pas être prise lors de la recherche ci dessus
temp[position] = 1000000;
temp[position+1] = 1000000;
}
return resultat;
}
public static int []meilleurPlace(int x, int y , int [] coordonneesHabitations){
//tableau du retour de la méthode
int []gravite = new int [2];
//coordonnées centre de gravité du triangle des 3 positions les plus proches
int cx = 0;
int cy = 0;
//on parcour le tableau troisPlusProche(donc index 6 car 3 couples) avec une boucle pour recuperer les coordonnées x et y
for (int index = 0; index < 6; index+=2) {
//on recherche le 3 positions les plus proches
int[]tableau = troisPlusProches(x, y, coordonneesHabitations);
cx += tableau[index];
cy += tableau[index+1];
}
//parti calcul et ajout au tableau de retour
cx = cx/3;
cy = cy/3;
gravite[0]=cx;
gravite[1]=cy;
return gravite;
}
} |
Partager