Entrada destacada

Como usar enums en Android, kotlin

Cómo programar: Formula de la distancia Euclidiana entre dos puntos en Java

Vamos a solucionar este problema usando el paradigma de Programación Orientada a Objetos, empecemos por definir una clase punto, la cual representara un punto en un espacio bidimencional.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
public class Punto {

    private double x, y;

    public Punto(double x, double y){
        this.x = x;
        this.y = y;
    }

    public double obtenerX(){
        return x;
    }

    public double obtenerY(){
        return y;
    }
}

Los atributos de clase la mayoría de las veces deben ser privados y solo deben ser accedidos mediante métodos de la clase. La referencia this es utilizado para evitar ambigüedad entre los atributos y los parámetros.

Ahora en la clase principal vamos a instanciar dos puntos utilizando new, el primero con coordenadas en (5, 10) y el segundo en (3, 7).

1
2
3
4
5
6
7
public class DistanciaEuclidiana {

    public static void main(String []args){
        Punto p1 = new Punto(5, 10);
        Punto p2 = new Punto(3, 7);
    }
}

Podemos agregar otro método constructor, tomando en cuanta la sobrecarga de métodos, el nuevo constructor tendrá parámetros y los puntos si iniciaran en el origen. Lo agregaremos a la clase punto y utilizaremos el otro constructor para crear el punto en (0, 0) como se muestra en la línea 14.

13
14
15
    public Punto(){
        this(0, 0);
    }

Método para calcular la distancia

Agregaremos el método  para calcular la distancia en la clase punto, este método recibe como parámetro un objeto punto que será con el que se calculara la distancia.

Basándonos de la siguiente formula.

Importando la clase Math, el método queda de la siguiente forma.


25
26
27
28
29
30
    public double distancia(Punto p){
        double diferenciaX = x - p.obtenerX();
        double diferenciaY = y - p.obtenerY();

        return Math.sqrt(Math.pow(diferenciaX, 2) + Math.pow(diferenciaY, 2));
    }

Clase Punto completa.

 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
/**
 * Created by JesusTepec on 25/07/2017.
 */
public class Punto {

    private double x, y;

    public Punto(double x, double y){
        this.x = x;
        this.y = y;
    }

    public Punto(){
        this(0, 0);
    }

    public double obtenerX(){
        return x;
    }

    public double obtenerY(){
        return y;
    }

    public double distancia(Punto p) throws Exception{
        if (p == null)
            throw new Exception("Ups! Debe inicializar el objeto punto");

        double diferenciaX = x - p.obtenerX();
        double diferenciaY = y - p.obtenerY();

        return Math.sqrt(Math.pow(diferenciaX, 2) + Math.pow(diferenciaY, 2));
    }
}

Es muy recomendable que en los métodos se comprueben los datos de entrada, para evitar errores de ejecución y que cuando sucede algún error esperado, se le pueda señalar al usuario que es lo que está pasando.

Clase principal.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
/**
 * Created by JesusTepec on 25/07/2017.
 */
public class DistanciaEuclidiana {

    public static void main(String []args){
        Punto p1 = new Punto(5, 10);
        Punto p2 = new Punto(3, 7);

        try {
            System.out.println("Distancia p1 a p2: " + p1.distancia(p2));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

--------------------------------------------------------------------------------------------------------------------------
Comenta tus dudas en la sección de comentarios

Comentarios

Publicar un comentario