javascript - 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]....])
现在代码正在运行,但输出定义了跨越原始多边形边界的矩形。
解决方案
对于任何使用此功能的人。最大的矩形文档是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 值也可能会影响这一点,但我并没有玩太多。这是一个很老的问题,但希望它可以帮助某人。
推荐阅读
- laravel - 如何将 select2 多选与 livewire 一起使用
- c# - 如何在 Unity 中序列化和反序列化包含 Gameobject 和 Vector2 的字典
- mysql - 如何为一对多关系建模参考完整性,其中 many > 0
- json - 如何从 Json 类型中获取数据
- python - Selenium chromedriver ver 87,禁用密码管理器不工作
- javascript - 将 Object 转换为 DOM 返回 [Object object]
- reactjs - Babel 配置文件在 Lerna monorepo 中不起作用
- python - 如何使用 python pptx 为 XY Plot 设置数据标签
- reactjs - 使用 jest 和 react 测试库对自定义钩子进行单元测试
- python-3.x - Django - 为什么html中的文件夹无法读取?