क्या दक्षिणावर्त क्रम में 2 डी बिंदुओं की एक सरणी को सॉर्ट करने के लिए ऐसा एल्गोरिथ्म है?
मैं विशेष रूप से अपने मामले में सही त्रिकोण के साथ काम कर रहा हूं इसलिए केवल 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;
}
}