2009-11-23 63 views

回答

0

假設它是一個多邊形,你可以嘗試使用一個公式來獲取標記所繪製的多邊形的質心。如果不是,並且它們是一堆散亂的點,則需要首先從外部邊界線段獲取那些形狀的邊界線段。此外,代碼假定多邊形是閉合的(循環),所以最後一個點是您的第一個點。

function centreOfMass(polyPoints:Array):Point{ 
var cx:Number = 0; 
var cy:Number = 0; 
var area:Number = area(polyPoints); 
var result:Point = new Point(); 
var i:Number,j:Number,n:Number = polyPoints.length; 
var factor:Number = 0; 
for(i = 0; i < n ; i++){ 
    j = (i+1) % n; 
    factor = polyPoints[i].x * polyPoints[j].y - polyPoints[j].x * polyPoints[i].y; 
    cx += polyPoints[i].x + polyPoints[j].x * factor; 
    cy += polyPoints[i].y + polyPoints[j].y * factor; 
} 
area *= 6.0; 
factor = 1/area; 
cx *= factor; 
cy *= factor; 
result.offset(cx,cy);//sets x and y to cx and cy 
return result; 
} 

function area(polyPoints:Array):Number{ 
var i:int,j:int,n:int = polyPoints.length; 
var area:Number = 0; 
for(i = 0; i < n; i++){ 
    j = (i+1) % n; 
    area += polyPoints[i].x * polyPoints[j].y; 
    area -= polyPoints[j].x * polyPoints[i].y; 
} 
area *= 0.5; 
return area; 
} 

您創建了一個點數組,並使用緯度/經度座標作爲x,y座標。如果您使用的是Flash Player 10,請隨意將該陣列更改爲Vector。並且不要忘記執行import.flash.geom.Point。

我沒有拿出代碼,我只是移植了amazing Paul Bourke website上的內容。那裏有很多便利的東西。

相關問題