jueves, 25 de julio de 2013

Code Snippets I: obtener ángulo vector en Java

    /**
   * Obtiene el angulo con respecto de la horizontal de un 

   * vector definido en el plano calculando en primer lugar el 
   * arco tangente y después comprobando el cuadrante en el que
   * se encuentra.
   * @param x0 Coordenada X del punto origen del vector.
   * @param y0 Coordenada Y del punto origen del vector.
   * @param x1 Coordenada X del punto final.
   * @param y1 Coordenada Y del punto final.
   * @return Ángulo en radianes.

   * @author K.Stopa - GPLv3
   */
public double getAngle(double x0, double y0, double x1, double y1) 

{       
        double dx = x1 - x0;
        double dy = y1 - y0;
        double dy0 = dy;
        double dx0 = dx;
        if (dx < 0.0) dx0 = -dx;
        if (dy < 0.0) dy0 = -dy;       
        double angval = Math.atan2(dy0, dx0);
        if (dx < 0.0 && dy > 0.0) {
            angval = Math.PI - angval;   
        } else if ((dx < 0.0) && (dy <= 0.0)) {
            angval = Math.PI + angval;
        } else if ((dx >= 0.0) && (dy < 0.0)) {
            angval = 2.0 * Math.PI - angval;
        }
        return angval;

}