Có một thuật toán như vậy để sắp xếp một mảng các điểm 2D theo thứ tự chiều kim đồng hồ không?
Tôi đặc biệt xử lý tam giác vuông trong trường hợp của tôi để chỉ có 3 điểm.
Tuy nhiên, tôi muốn biết liệu thuật toán đó có tồn tại không, nếu không thì cách đơn giản để trả về 3 điểm của tam giác theo thứ tự theo chiều kim đồng hồ là gì?
Chỉnh sửa: Tôi đang cố gắng tính các điểm theo chiều kim đồng hồ so với tâm của đa giác, đó là lồi.
Cập nhật: Đây là triển khai tôi đã kết thúc bằng cách sử dụng dựa trên câu trả lời đã chọn, nó không phải là hiệu suất quan trọng và chỉ xảy ra một lần trong một thời gian để nó hoạt động.
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;
}
}