【问题标题】:What format polygon does D3plus largest rectangle require?D3plus最大矩形需要什么格式的多边形?
【发布时间】:2018-11-15 00:35:09
【问题描述】:

我发现了一个有趣的演示,演示了如何使用 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": 2, "y": 1}... .)

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

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

【问题讨论】:

    标签: javascript d3.js polygon d3plus


    【解决方案1】:

    对于任何使用它的人。最大的Rect 文档是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 值也可能会影响这一点,但我并没有过多地使用它。这是一个很老的问题,但希望对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-18
      • 2023-04-11
      • 1970-01-01
      • 2022-07-22
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      相关资源
      最近更新 更多