यहां एक आसान तरीका है, एक कार्यान्वयन कार्यान्वयन के साथ मैंने एक साथ फेंक दिया।
http://jsfiddle.net/kBsdW/29/
बिंदुओं के माध्यम से
- लूप
- पहले
- रिकार्ड से अधिकतम दूरी दूरी
- के साथ एक दूसरे बिंदु का पता लगाएं एक बार जब आप अधिकतम दूरी के सभी उनका औसत और गणना त्रुटि सहनशीलता
- अपनी त्रुटि सहनशीलता के खिलाफ अपनी सभी रिकॉर्ड की गई दूरीों की जांच करें
यह माउस इनपुट या टच सेंसर से उपयोगकर्ता इनपुट के लिए बहुत अच्छा काम करता है। यह एल्गोरिदम ओ (एन^2) है और द्रव्यमान के केंद्र को खोजने और त्रिज्या दूरी की जांच के विपरीत डेल्टा अधिकतम दूरी का उपयोग करता है।
यह "सर्वोत्तम" फिट-सर्कल विधि से अधिक कुशल लगता है जिसे 3 अंक के प्रत्येक संयोजन पर गणना करना है।
यह हैक ~ अलगो इस तथ्य का लाभ उठाता है कि सर्कल पर दो बिंदुओं के बीच अधिकतम दूरी सर्कल का व्यास है।
function isCircle(points, error) {
if(points.length <= 2) return true;
var weights = [];
var maxDistance = 0;
var sumDistance = 0;
var avgDistance = 0;
var errorConstraint = 0;
for(var i=0; i<points.length; i++) {
var distance = 0;
for(var j=0; j<points.length; j++) {
var d = getDistance(points[i], points[j]);
if(d > distance) {
distance = d;
}
}
if(distance > 0) {
if(distance > maxDistance) maxDistance = distance;
sumDistance += distance;
weights.push(distance);
}
}
avgDistance = sumDistance/weights.length;
errorConstraint = error * avgDistance;
for(var i=0; i<weights.length; i++) {
if(Math.abs(avgDistance - weights[i]) > errorConstraint) {
return false;
}
}
return true;
}
स्रोत
2012-01-30 17:13:59
क्या आप कृपया जो कुछ हासिल करने की कोशिश कर रहे हैं उसमें अधिक विशिष्ट हो सकते हैं? – Alexandros
एक अपूर्ण सर्कल क्या है? –
अब के बारे में कैसे ?? – Afra