我的目标是用一个矩形网格来组合它们,这样可以减少矩形的数量。如果每个网格中没有任何内容,则将其标记为False,否则它将包含一个名为level的值的矩形。具有匹配级别的矩形可以使用union\u ip与另一个矩形合并,union\u ip将两个矩形合并为一个矩形。结果应返回新合并矩形的列表。你知道吗
但我的行为越来越不一致。Here is an example。黑色区域包含矩形,而白色区域不包含矩形。较粗的红线显示合并的结果。右上角是我正在测试的当前案例中生成的内容。左下角的情况下,我正在寻找,但它只能与一个边界或如果只有顶部或底部的边界被添加。你知道吗
如果有人能帮忙,我会很感激的。我知道代码是一团糟,但它一直工作到现在。你知道吗
def getGrid():
grid = {}
for i in xrange(0, 18):
grid[i] = {}
for j in xrange(0, 18):
grid[i][j] = False;
return grid
def getReducedRects(grid):
tablx = {}
myrect = False
x_max, y_max = len(grid), len(grid[0]);
for x in xrange(0, x_max):
for y in xrange(0, y_max):
if grid[x][y]:
if myrect:
if grid[x][y].level == myrect.level:
myrect.union_ip(grid[x][y])
else:
try:
tablx[x].append(myrect);
except:
tablx[x] = [];
tablx[x].append(myrect);
myrect = grid[x][y];
else:
myrect = grid[x][y].copy();
else:
if myrect:
try:
tablx[x].append(myrect);
except:
tablx[x] = [];
tablx[x].append(myrect);
myrect = False;
for x in xrange(0, x_max - 1):
try:
le = len(tablx[x]);
tablx[x + 1];
except:
continue;
i = 0
while i < le:
r = tablx[x][i];
coll = aabb_collision_single(r, tablx[x + 1]);
for rc in coll:
if rc.bottom == r.bottom and rc.top == r.top and r.level == rc.level:
rc.union_ip(r);
del(tablx[x][i]);
le -= 1;
i -= 1;
break;
i += 1;
myr = []
for r in tablx.itervalues():
myr += r;
return myr
通过在列末尾添加另一个检查来解决!对不起,我的意大利面代码太长了,但它现在可以正常工作了。你知道吗
def getReducedRects(grid):
tablx = {}
myrect = False
x_max, y_max = len(grid), len(grid[0]);
for x in xrange(0, x_max):
for y in xrange(0, y_max):
if grid[x][y]:
if myrect:
if grid[x][y].level == myrect.level:
myrect.union_ip(grid[x][y])
else:
try:
tablx[x].append(myrect);
except:
tablx[x] = [];
tablx[x].append(myrect);
myrect = grid[x][y];
else:
myrect = grid[x][y].copy();
else:
if myrect:
try:
tablx[x].append(myrect);
except:
tablx[x] = [];
tablx[x].append(myrect);
myrect = False;
if myrect:
try:
tablx[x].append(myrect);
except:
tablx[x] = [myrect];
myrect = False;
for x in xrange(0, x_max - 1):
try:
le = len(tablx[x]);
tablx[x + 1];
except:
continue;
i = 0
while i < le:
r = tablx[x][i];
coll = aabb_collision_single(r, tablx[x + 1]);
for rc in coll:
if rc.bottom == r.bottom and rc.top == r.top and r.level == rc.level:
rc.union_ip(r);
del(tablx[x][i]);
le -= 1;
i -= 1;
break;
i += 1;
myr = []
for r in tablx.itervalues():
myr += r;
return myr
目前没有回答
相关问题 更多 >
编程相关推荐