Вы находитесь на странице: 1из 3

package a;

import java.util.ArrayList;
import java.util.Random;

public class Algoritmo {

static final double CENTER_LAT= 4.709938;


static final double CENTER_LNG = -74.0300989;

public static void main(String[] args) {


long sTime = System.nanoTime();
new Algoritmo();
long eTime = System.nanoTime();
System.out.println((eTime - sTime)/1000000);
}

public Algoritmo() {
double [] centro = generateAleatoryPosition(CENTER_LAT,
CENTER_LNG);
ArrayList<double[]> list =
generateAleatoryPositionsList(1000);
masCercanoV1(centro, list);
}

public double[] masCercanoV1(double[] centro, ArrayList<double[]>


list){
ArrayList<double[]> lista_ordenada = burbuja(centro, list);
imprimir(centro, lista_ordenada);
return lista_ordenada.get(0);
}

public ArrayList<double[]> burbuja(double[] centro,


ArrayList<double[]> list){
for(int i = 0; i < list.size() - 1; i++)
{
for (int j = 0; j < list.size() - 1; j++) {
double[] coords_1 = list.get(j);
double distancia_1 = distance(centro[0],
centro[1], coords_1[0], coords_1[1]);
double[] coords_2 = list.get(j+1);
double distancia_2 = distance(centro[0],
centro[1], coords_2[0], coords_2[1]);
if (distancia_1 > distancia_2)
{
double[] tmp = coords_2;
list.set(j+1, coords_1);
list.set(j, tmp);
}
}

}
return list;
}

public void imprimir(double[] center, ArrayList<double[]> list) {


for(int i =0;i<list.size(); i++) {
double[] coord = list.get(i);
double distance = distance(center[0], center[1],
coord[0], coord[1]);
System.out.println(coord[0] + " " + coord[1] + ", " +
distance );
}
}

public ArrayList<double[]> generateAleatoryPositionsList(int


number){

ArrayList<double []> list = new ArrayList<double[]>();


for(int i = 0; i<number;i++) {
list.add(generateAleatoryPosition(CENTER_LAT,
CENTER_LNG));
}
return list;
}

public double[] generateAleatoryPosition(double center_lat,


double center_lng) {
double [] values = new double[2];
int rangeMin = 0;
int rangeMax = 3;
Random r = new Random();
double randomLatValue = rangeMin + (rangeMax - rangeMin) *
r.nextDouble();
double randomLngValue = rangeMin + (rangeMax - rangeMin) *
r.nextDouble();
// Position 0, latitude
values[0] = center_lat + randomLatValue;
// Position 1, longitude
values[1] = center_lng + randomLngValue;
return values;
}

public double distance(double lat1, double lng1, double lat2,


double lng2) {
double radius = 6371;
double dLat = Math.toRadians(lat2 - lat1);
double dLng = Math.toRadians(lng2 - lng1);
double sindLat = Math.sin(dLat / 2);
double sindLng = Math.sin(dLng / 2);
double va1 = Math.pow(sindLat, 2) + Math.pow(sindLng, 2) *
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2));
double va2 = 2 * Math.atan2(Math.sqrt(va1), Math.sqrt(1 -
va1));
double distance = radius * va2;
return distance;
}

Вам также может понравиться