给定 JavaScript 中的顶点,如何找到凹不规则多边形的质心?
我想将一组 x,y 点传递给 JavaScript 函数并获得一个 x,y 点。
var my_points = [{x:3,y:1},{x:5,y:8},{x:2,y:9}];
function get_polygon_centroid(points){
// answer
}
var my_centroid = get_polygon_centroid(my_points);
my_points
变量只应该表示要给出的点的格式,不代表要给出的具体点数 .质心 返回的将是多边形内某处的一个点。
最终目标是在 Google Maps V3 应用程序中的多边形质心处添加一个标记。
最佳答案
对于 2D 表面的质心(这可能是您需要的),
最好从 a little bit of maths 开始.
我在这里将其改编为您自己的符号:
function get_polygon_centroid(pts) {
var first = pts[0], last = pts[pts.length-1];
if (first.x != last.x || first.y != last.y) pts.push(first);
var twicearea=0,
x=0, y=0,
nPts = pts.length,
p1, p2, f;
for ( var i=0, j=nPts-1 ; i<nPts ; j=i++ ) {
p1 = pts[i]; p2 = pts[j];
f = p1.x*p2.y - p2.x*p1.y;
twicearea += f;
x += ( p1.x + p2.x ) * f;
y += ( p1.y + p2.y ) * f;
}
f = twicearea * 3;
return { x:x/f, y:y/f };
}
关于javascript - 如何在 JavaScript 中找到凹不规则多边形的质心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9692448/