【问题标题】:how to efficiently store occupied/unoccupied 2D space (with insertion)如何有效存储已占用/未占用的 2D 空间(带插入)
【发布时间】:2011-12-29 14:47:06
【问题描述】:

我有一个 X 乘 Y 空间,其中 X 和 Y 由给我的矩形的大小决定。我将一定大小的定向矩形插入空间,一次一个。每个插入都尽可能向左,然后尽可能向上(尽可能接近(0,0))。代表这一点的最佳方式是什么?我正在用 Python 实现它。 this 问题的最佳答案很有帮助,但我希望得到一些特定于 Python 的建议,因为我对语言本身也很陌生。

谢谢!

【问题讨论】:

  • @S.Lott:我认为 OP 的意思是“一次一个”。
  • 是的,对不起,马塞洛是正确的。感谢约翰的编辑。

标签: algorithm data-structures python-3.x python


【解决方案1】:

如果您想有效地打包矩形,有一些成熟的算法。这是一个特定的algorithm 的 Python 实现。还有一篇关于打包光照贴图 here 的文章,我有一个 Python version (老实说,我不记得我是自己移植的,还是从其他地方得到的)。

【讨论】:

    【解决方案2】:

    在这样的二维空间中工作有两种选择。

    1. 列表列表。 [ [0, 0, ..., 0], [0, 0, ..., 0], ... [0, 0, ..., 0] ] 外部列表是“X”访问,内部列表是“Y”访问。每个点都是space[x][y]。你用space = list( list( EMPTY for j in range(Y_size) ) for i in range(X_size) ) 或类似的东西来构建它。

      您可以使用一些填充算法来屏蔽矩形,该算法将值设置为矩形空间块。

      for x in range( low, high ):
          for y in range ( low, high ):
              space[x][y]= FILLED # or whatever object you're putting there.
      
    2. 映射。 { (0,0): 0, (0,1): 0, ... (X,Y): 0 }。每个点都是space[x,y]。你用space = dict( ( (x,y), EMPTY ) for x in range(X_size) for y in range(Y_size) ) 构建它。

      您使用几乎相同的填充算法屏蔽矩形。只需稍微更改语法即可。

    【讨论】:

      【解决方案3】:

      Quadtrees 经常用于这类事情。听起来您想要一个区域四叉树。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-17
        • 2014-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-13
        相关资源
        最近更新 更多