시계 방향으로 2D 포인트 배열을 정렬하는 알고리즘이 있습니까?
나는 특히 3 점 만 올바른 삼각형을 다루고 있습니다.
그러나 그러한 알고리즘이 존재하는지 알고 싶습니다. 내 삼각형의 3 점을 시계 방향으로 반환하는 간단한 방법은 무엇입니까?
편집 : 볼록한 다각형의 중심을 기준으로 시계 방향으로 점을 계산하려고합니다.
업데이트 : 이것은 선택한 답변을 기반으로 사용하여 구현 한 것입니다. 성능이 중요하지 않으며 한 번만 발생하므로 제대로 작동합니다.
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;
}
}