¿Existe tal algoritmo para ordenar una matriz de puntos 2D en el sentido de las agujas del reloj?
Estoy tratando específicamente con el triángulo rectángulo en mi caso, así que solo 3 puntos.
Sin embargo, estoy interesado en saber si existe dicho algoritmo, si no, ¿cuál es una manera simple de devolver los 3 puntos de mi triángulo en el sentido de las agujas del reloj?
Editar: estoy tratando de calcular los puntos en el sentido de las agujas del reloj en relación con el centroide del polígono, que es convexo.
Actualización: Esta es la implementación que terminé usando según la respuesta elegida, no es crítica para el rendimiento y solo ocurre de vez en cuando, así que funciona.
ArrayList<PVector> pointList = new ArrayList<PVector>();
pointList.add(A);
pointList.add(B);
pointList.add(C);
Collections.sort( pointList, new TriangleVectorComparator(origin) );
return pointList;
// Comparator
package triangleeditor;
import java.util.Comparator;
import processing.core.PVector;
public class TriangleVectorComparator implements Comparator<PVector> {
private PVector M;
public TriangleVectorComparator(PVector origin) {
M = origin;
}
public int compare(PVector o1, PVector o2) {
double angle1 = Math.atan2(o1.y - M.y, o1.x - M.x);
double angle2 = Math.atan2(o2.y - M.y, o2.x - M.x);
//For counter-clockwise, just reverse the signs of the return values
if(angle1 < angle2) return 1;
else if (angle2 < angle1) return -1;
return 0;
}
}