D3plus最大矩形需要什么格式的多边形?

时间:2018-06-05 13:36:45

标签: javascript d3.js polygon d3plus

我发现了一个有趣的演示,演示了如何使用D3plus在不规则形状的多边形here中找到最大的矩形。

我试图为我正在处理的多边形重新创建这个,但目前代码无效。它似乎无休止地运行。我使用的代码如下:



d3.csv("data/polyPoints.csv", function(error, polyPoints) {
  if (error) return console.error(error);
  
  // coerce string values to numbers
  polyPoints.forEach(function(d) {
  	d3.keys(d).forEach(function(k) {
  		d[k] = +d[k]
  	})
  });
  
  // settings for geom.largestRect
  var rectOptions = {
  	angle: 0,
  	maxAspectRatio: 5,
  	nTries: 1

  };
  
  console.log(rectOptions);
  console.log(polyPoints);

   var lRect = d3plus.geom.largestRect(polyPoints, rectOptions);
  console.log(lRect); 
  
});




我怀疑我的多边形格式不正确。

更新

我正在取得进步。我的原始多边形对象取自csv,并创建了一组键值对数组(例如{" x":0" y":1},{" x& #34;:2," y":1} ....)

我将其转换为数组数组(例如[[1,0],[2,0] ....])

现在代码正在运行,但输出是定义跨越原始多边形边界的矩形。

1 个答案:

答案 0 :(得分:1)

对于与此相关的任何人。最大的矩形文档是 https://d3plus.org/docs/#largestRect,可以使用以下代码运行。

const d3p = require('d3plus');
const polygon = [[x,y],[x,y],[x,y]...]

const rectOptions = {
    maxAspectRatio: 5,
    nTries: 20
};

let lRect = d3p.largestRect(rdp, rectOptions);

所使用的算法是一种近似算法,并选择多边形内的随机点进行计算。因此,盒子的边缘不会总是接触边缘,但应该“足够接近”。

options.tolerance 值也可能会影响这一点,但我并没有过多地使用它。这是一个很老的问题,但希望它对某人有所帮助。