Javascript 将网格中的矩形分组
我有一个随机切片的矩形网格-宽度为80个单位 我已经将网格每行的可用空间存储在如下数组中:Javascript 将网格中的矩形分组,javascript,algorithm,geometry,grouping,Javascript,Algorithm,Geometry,Grouping,我有一个随机切片的矩形网格-宽度为80个单位 我已经将网格每行的可用空间存储在如下数组中: [ {pX:1,sX:15}, {pX:30,sX:13}, {pX:43,sX:1}, {pX:44,sX:17} ], [ {pX:1,sX:15}, {pX:16,sX:14}, {pX:30,sX:13}, {pX:43,sX:1}, {pX:44,sX:17} ] 其中pX是起点,sX表示每个矩形的宽度 一些数组项是相邻的
[
{pX:1,sX:15},
{pX:30,sX:13},
{pX:43,sX:1},
{pX:44,sX:17}
],
[
{pX:1,sX:15},
{pX:16,sX:14},
{pX:30,sX:13},
{pX:43,sX:1},
{pX:44,sX:17}
]
其中pX是起点,sX表示每个矩形的宽度
一些数组项是相邻的,即
pX[i]+sX[i]=pX[i+1]
。如何将这些数组项组合在一起,并获得具有最大相邻宽度的结果矩形?您需要收紧数组,连接相邻的段。此代码(Delphi,将其视为伪代码)以需要的方式缩小数组:
var
pX, sX: TArray<Integer>;
i, removed: Integer;
begin
pX := [1, 30, 43, 44, 64, 66, 69, 72];
sX := [15, 13, 1, 17, 2, 2, 3, 5];
removed := 0;
for i := 1 to High(pX) do begin
if (pX[i - removed - 1] + sX[i - removed - 1] = pX[i]) then
begin ////join neighbors
sX[i - removed - 1] := sX[i - removed - 1] + sX[i];
Inc(removed); ////removed++
end
else
if (removed > 0) then
begin ////copy to new place
pX[i - removed] := pX[i];
sX[i - removed] := sX[i];
end;
end;
////shorten array, remove tail
SetLength(px, Length(pX) - removed);
SetLength(sX, Length(sX) - removed);
////output result
Memo1.Lines.Add(ArrayToString(pX));
Memo1.Lines.Add(ArrayToString(sX));
你能发布想要的输出吗?@NenadVracar:
[{pX:1,sX:15},{pX:30,sX:31}],{pX:1,sX:60}]
是的!!!“收紧”,而不是“加入”才是正确的方法!非常感谢您为TurboPascal时间所作的介绍。
1 30 64 69
15 31 4 8