import java.util.List;
public class SentidoRecorridoPoligono {
public static void main(String[] args) { // Ejemplo de uso
Punto centro = new Punto(0, 0);
List<Punto> puntosPoligono = obtenerPuntosPoligonoEjemplo();
boolean sentidoHorario = verificarSentidoRecorrido(centro, puntosPoligono);
if (sentidoHorario) { System.out.println("El recorrido es en sentido contrario a las agujas del reloj."); } else { System.out.println("El recorrido es en sentido de las agujas del reloj o es un polígono degenerado."); }
}
static boolean verificarSentidoRecorrido(Punto centro, List<Punto> puntos) { double sumaAngulos = 0;
for (int i = 0; i < puntos.size(); i++) { Punto puntoActual = puntos.get(i);
Punto puntoSiguiente = puntos.get((i + 1) % puntos.size());
double anguloActual = calcularAngulo(centro, puntoActual);
double anguloSiguiente = calcularAngulo(centro, puntoSiguiente);
double anguloDiferencia = anguloSiguiente - anguloActual;
sumaAngulos += anguloDiferencia;
}
return sumaAngulos > 0;
}
static double calcularAngulo(Punto centro, Punto punto) { return Math.atan2(punto.getY() - centro.getY(), punto.getX() - centro.getX());
}
static List<Punto> obtenerPuntosPoligonoEjemplo() { // Ejemplo de obtención de puntos de un polígono
// (se asume que ya tienes la lógica para obtener la lista de puntos)
// En este ejemplo, se crea una lista con puntos arbitrarios.
// Puedes sustituir esto con la lógica de tu aplicación.
return List.of(
new Punto(1, 0),
new Punto(0, 1),
new Punto(-1, 0),
new Punto(0, -1)
);
}
}
class Punto { private double x;
private double y;
public Punto(double x, double y) { this.x = x;
this.y = y;
}
public double getX() { return x;
}
public double getY() { return y;
}
}