将正方形捕捉到网格算法

时间:2016-02-22 16:50:06

标签: algorithm

我正在编写一个游戏,其中包含可以移动的二维瓷砖板。物理引擎正在处理运动,但在运动结束时,我试图将图块捕捉到网格。

现在坚持!在大多数情况下,我已经正确地捕捉到网格。我只是使用模数的形式(通过重复加上比较)从正方形的位置计算行和列,并确定每个图块的中心在网格中的位置。

这是困难的部分。有"边缘情况" (字面意思)哪里可以有两个瓷砖,最终在同一个方格。这是因为切片比正方形稍微小一些,所以如果你移动一个刚好越过边缘线,下一个被推动但不足以通过边缘线,所以最终得到两个属于同一网格的正方形

在极端情况下,存在更难的问题。

取这个网格,其中X是图块的中心。

 _______
| |X| | |
| |X| | |
| |X|X| |
|_|X|_|_|

现在假设它在移动结束时看起来像这样(其中X是"在线上")

 _______
| X | | |
| X | | |
| X X | |
|_X_|_|_|

你可以看到,不仅两个方格属于第三行和第二列,而且你不能只是"推"瓷砖在一个方向或另一个方向不计数,检查等。

如果你想象一个像这样的网格(所有的瓷砖都在线上,你会发现这可能会失控。

 _______
| X X X |
| X X X |
| X X X |
|_X_X_X_|

想法?

修改

这是一个现实而常见的案例:

 _______
| |X| | |
| |X| | |
| X X | |
|_|X|_|_|

现在,两个都抓到同一列,留下一个"挤压"我们试图将5个瓷砖分成4行列的情况......

0 个答案:

没有答案