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;
}
}