我发现了一个有趣的演示,演示了如何使用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] ....])
现在代码正在运行,但输出是定义跨越原始多边形边界的矩形。
答案 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 值也可能会影响这一点,但我并没有过多地使用它。这是一个很老的问题,但希望它对某人有所帮助。