编辑请参阅下面的评论(问题尚未解决)。任何想尝试我的代码的人都可以在这里进行:http: //tinker.io/e0676
EDIT2我想我已经找到了问题:http ://www.geocomputation.org/1999/076/gc_076.htm将尝试以某种方式解决它......
事情就是这样。如果您有多边形的面积和周长,您可以通过获取 area/(perimeter*perimeter) 的结果来测量多边形与圆的接近程度。我知道如何测量周长:
function getPolySize(arrP){ //the first and last point in arrP is the same!
var S = 0;
for(var i=1, l=arrP.length;i<l;i++)
S += Math.sqrt(Math.pow(arrP[i-1].x-arrP[i].x,2)+Math.pow(arrP[i-1].y-arrP[i].y,2));
return S;
}
和区域:
function getPolyArea(arrP){
var A = 0;
for(var i=0,l=arrP.length-1;i<l;i++)
A += arrP[i].x*arrP[i+1].y - arrP[i+1].x*arrP[i].y;
A = A/2;
return Math.abs(A);
}
一切正常,但是如果我制作一个尽可能接近圆形的多边形,我就会开始得到奇怪的结果。我用它来制作圆形多边形:
var arrCircle = [];
function setPixel(x,y){
arrCircle.push({x:x,y:y});
}
function rasterCircle(xCenter, yCenter, radius)
{
var x, y, r2;
r2 = radius * radius;
for (x = -radius+1; x <= radius; x++){
y = Math.floor(Math.sqrt(r2 - x*x) + 0.5);
setPixel(xCenter + x, yCenter + y);
}
for (x = radius-1; x >= -radius; x--) {
y = Math.floor(Math.sqrt(r2 - x*x) + 0.5);
setPixel(xCenter + x, yCenter - y);
}
}
arrCircle.push(arrCircle[0]);
由于半径较大的圆形多边形比半径较小的圆形多边形更接近理想的圆形,我认为圆形越大,面积/(周长*周长)应该越大,但事实并非如此,我不知道为什么。理想圆的“圆度”为 1/4PI (0,07957747154594766788444188168626)。我用(像多边形的圆圈)做了一些测试,这些是我的结果:
radius 10 roundness 0.0760194950578244
radius 20 roundness 0.07542738445429042
radius 30 roundness 0.07549530319982335
radius 40 roundness 0.07472106160782283
radius 50 roundness 0.07490614579701928
radius 60 roundness 0.0750939048274632
radius 70 roundness 0.07502892726254591
radius 80 roundness 0.07512064515249058
radius 90 roundness 0.0752191417813967
那么为什么它应该增加的时候却减少了呢?任何人都可以帮忙吗?