如果我有20个点,如何检查这些点是否组成了一个圆?它不必是一个完美的圆。
例如,如果我每200毫秒存储鼠标的坐标(当用户移动鼠标时),我想看看用户是否做出了一个圆形手势。但我不能期望用户做出一个完美的圆。
例如,如果我每200毫秒存储鼠标的坐标(当用户移动鼠标时),我想看看用户是否做出了一个圆形手势。但我不能期望用户做出一个完美的圆。
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;
}
Math.abs(avgDistance - weights[i]) > errorConstraint
太过简单了。想象一下从圆的中心开始的人。你需要大多数点来验证这一点。所以需要2个参数。 - UmNyobe