我有一个存储为点的矩形列表。目前,数据如下所示:
boxes = [{'p1': (0,0), 'p2': (100,20)},
{'p1': (5,5), 'p2': (15,15)},
{'p1': (20,5), 'p2': (30,15)},
{'p1': (35,5), 'p2': (45,15)},
{'p1': (70,5), 'p2': (80,15)}]
我还有一个基本函数可以测试一个矩形是否包含在另一个矩形中:
def isChild(b1,b2):
return (b1 != b2 and
(b1['p2'][0]-b1['p1'][0] * b1['p2'][1]-b1['p1'][1]) > (b2['p2'][0]-b2['p1'][0] * b2['p2'][1]-b2['p1'][1]) and
b1['p1'][0] < b2['p2'][0] and
b1['p2'][0] > b2['p1'][0] and
b1['p1'][1] < b2['p2'][1] and
b1['p2'][1] > b2['p1'][1])
我想以一组矩形和它们的孩子结束,但我不确定我应该如何存储它们。我在想这样的事情:
[{'p1': (0,0),
'p2': (100,20),
'children': [{'p1': (5,5), 'p2': (15,15)},
{'p1': (20,5), 'p2': (30,15)},
{'p1': (35,5), 'p2': (45,15)},
{'p1': (70,5), 'p2': (80,15)}]}]
上下文是这些框表示网页上的元素。数据结构是用来生成基本标记的,所以上面的结构最终会是这样的:
<div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
- 源/目标数据结构是否适合这种情况?如果不是,那是什么?
- 我怎样才能从源头到达目标?
- 一位朋友建议使用 r-trees。这有意义吗?