Existe-t-il un tel algorithme pour trier un tableau de points 2D dans le sens horaire?
Je traite spécifiquement du triangle rectangle dans mon cas, donc seulement 3 points.
Cependant, je suis intéressé à savoir si un tel algorithme existe, sinon quel est un moyen simple de retourner les 3 points de mon triangle dans le sens horaire?
Edit: j'essaie de calculer les points dans le sens horaire par rapport au centre de gravité du polygone, qui est convexe.
Mise à jour: c'est l'implémentation que j'ai fini par utiliser en fonction de la réponse choisie, ce n'est pas critique en termes de performances et ne se produit que de temps en temps, donc ça marche.
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;
}
}