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



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

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

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]....](

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

对于任何使用它的人。最大的 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);

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

选项公差值也可能影响这一点,但我没有玩太多。这是一个非常古老的问题,但希望它对某人有所帮助。

最新更新