gpt4 book ai didi

javascript - 连接相邻的矩形?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:19:38 25 4
gpt4 key购买 nike

我想连接数组中并排(相邻)的矩形对象。例如:(结构:“{x:x-位置,y:y-位置,x1:宽度,y1:高度}”)

{x: 0, y: 0, x1: 3, y1: 2}, {x: 0, y: 2, x1: 3, y1: 2}

可以放在一起(如我所愿):

{x: 0, y: 0, x1: 3, y1: 4}

到现在我找不到解决问题的方法,所以我希望你能帮助我。这是我数组的一部分,我想在其中并排找到这些 - 矩形并将它们保存在一个新数组中:

[{x:0, y: 0, x1:3, y1:2},{x:0, y: 2, x1:3, y1:2},{x:0, y: 4, x1:3, y1:2},{x:0, y: 6, x1:3, y1:2},{x:0, y: 8, x1:3, y1:2},{x:0, y: 10, x1:3, y1:2},{x:0, y: 12, x1:3, y1:2},{x:0, y: 14, x1:3, y1:2},{x:0, y: 16, x1:3, y1:2},{x:0, y: 18, x1:3, y1:2},{x:0, y: 20, x1:3, y1:2},{x:0, y: 22, x1:3, y1:2},{x:0, y: 24, x1:3, y1:2},{x:0, y: 26, x1:3, y1:2},{x:0, y: 28, x1:3, y1:2},{x:0, y: 30, x1:3, y1:2}//[...]so on

最佳答案

这应该可以做到。一开始我无法识别矩形是堆叠在一起的。我必须考虑所有情况。我相信它会递归搜索并合并放置矩形的任何位置,如果它们的接触边缘大小相同。

var rects = [{x:0, y: 0, x1:3, y1:2},{x:0, y: 2, x1:3, y1:2},{x:0, y: 4, x1:3, y1:2},{x:0, y: 6, x1:3, y1:2},{x:0, y: 8, x1:3, y1:2},{x:0, y: 10, x1:3, y1:2},{x:0, y: 12, x1:3, y1:2},{x:0, y: 14, x1:3, y1:2},{x:0, y: 16, x1:3, y1:2},{x:0, y: 18, x1:3, y1:2},{x:0, y: 20, x1:3, y1:2},{x:0, y: 22, x1:3, y1:2},{x:0, y: 24, x1:3, y1:2},{x:0, y: 26, x1:3, y1:2},{x:0, y: 28, x1:3, y1:2},{x:0, y: 30, x1:3, y1:2}];

function rectsReduce(arr){

function mergeRects(r,sa,a,i){

function compare(r1,r2){
return r1.y == r2.y ? r1.x > r2.x ? r1.x - r2.x == r2.x1
: r2.x - r1.x == r1.x1
: r1.x == r2.x ? r1.y > r2.y ? r1.y - r2.y == r2.y1
: r2.y - r1.y == r1.y1
: false;
}

var fi = sa.findIndex(e => compare(r,e))+i+1,
r2 = ~fi ? a.splice(fi,1)[0] : void 0;
return !!r2 && { x : Math.min(r.x, r2.x),
y : Math.min(r.y, r2.y),
x1 : r.x == r2.x ? r.x1 : r.x1 + r2.x1,
y1 : r.y == r2.y ? r.y1 : r.y1 + r2.y1};
}

return arr.reduce((p,c,i,a) => { var mergedRect = {};
a.length > 1 && (mergedRect = mergeRects(c,p.slice(i+1),a,i),
!!mergedRect && (p[i] = mergedRect,
p = rectsReduce(p)));
return p},arr);
}

document.write("<pre>" + JSON.stringify(rectsReduce(rects)) + "</pre>");

关于javascript - 连接相邻的矩形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36966421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com