Javascript 将网格中的矩形分组

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表示每个矩形的宽度 一些数组项是相邻的

我有一个随机切片的矩形网格-宽度为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[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