【发布时间】:2020-12-07 19:20:00
【问题描述】:
我在此处阅读了有关查找多边形质心的其他示例,但我看不出哪里出错了,为什么我的质心如此之远。如果有人可以向我解释我的计算在哪里。
我想出了这个解决方案:
function getCentroid() {
var coords = getCoords();
var signedArea = 0;
var x = 0;
var y = 0;
for (var i = 0; i < coords.length - 1; i++) {
var temp = (coords[i].x * coords[i + 1].y) - (coords[i + 1].x * coords[i].y);
signedArea += temp;
x += (coords[i].x + coords[i + 1].x) * temp;
y += (coords[i].y + coords[i + 1].y) * temp;
}
signedArea *= 0.5;
x /= 6 * signedArea;
y /= 6 * signedArea;
return "" + Math.round(x) + "," + Math.round(y);
}
getCoords() 以这种形式返回一个 JSON 数组:
[
{
"x":"600",
"y":"124"
},
{
"x":"560",
"y":"396"
},
{
"x":"994",
"y":"370"
},
{
"x":"918",
"y":"121"
},
{
"x":"600",
"y":"124"
}
]
函数 getCentroid() 以逗号分隔的字符串形式返回多边形的质心(或至少应该如此),格式为:x,y
但是,它返回的内容离中心太远了。
返回:312239,219226
谁能指出我正确的方向?
【问题讨论】:
标签: javascript centroid