【问题标题】:Centroid of a polygon script多边形脚本的质心
【发布时间】: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


    【解决方案1】:

    我真傻,我没有意识到坐标的值是作为字符串存储在 json 数组中的。我将它们投射到 Numbers 上,一切都很好。

    【讨论】:

      猜你喜欢
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-24
      相关资源
      最近更新 更多