代码之家  ›  专栏  ›  技术社区  ›  Nicolas Goy

调整大小和移动时矩形捕捉

  •  1
  • Nicolas Goy  · 技术社区  · 14 年前

    我有一个画布,可以在其中绘制、调整大小和移动矩形。

    我正在寻找一种算法来防止重叠和启用捕捉我正在编辑的矩形与其他矩形。

    我尝试过不同的方法,但没能让它正常工作。

    我所有的方法都基于一个简单的循环,这个循环检查我正在编辑的矩形(e)和其他矩形(o[n])。

    防止重叠不是问题,我的问题是捕捉,因为它可以在迭代o时修改e。

    例如,如果我将e移动到o[1]附近,它将与它一起捕捉,但此捕捉可能会与o[0]创建一个重叠,不会选中该重叠。

    在我开始做一些递归或过于幼稚的事情之前,我想知道是否有人知道更好的方法。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Oren Trutner    14 年前

    两次通过的方法有帮助吗,例如

    1. 在第一个步骤中,对照O检查E并生成一个简短的快照候选列表。

    2. 在第二步中,检查每个快照候选对象是否与O重叠。

    如果扫描整个O的列表非常昂贵(工作量随对象数量线性增长),考虑 quad-tree 用于存储对象和/或其顶点。四叉树可以让您更快地缩小附近点的范围。