在Java中实现正方形分区

在Java中实现正方形分区,java,android,algorithm,shape,Java,Android,Algorithm,Shape,我面临一个概念上的问题。我想实现一个Android游戏,其中一个功能是:每次我触摸一个正方形,它都被分割成4个大小相同的小正方形。接下来的每一个正方形都以相同的方式进行分区,最大限度为原始大小的1/1024。下面是一个小例子: 问题是,我不确定如何以最佳方式存储这些数据。我需要存储每一块的大小,以便它知道分割后应该缩小到什么大小。例如,如果在第一次触摸和第一次除法之后,我的数组(16元素限制)将如下所示: 0 0 1 1 0 0 1 1 2 2 3 3 2 2 3 3 然后,如果我触摸

我面临一个概念上的问题。我想实现一个Android游戏,其中一个功能是:每次我触摸一个正方形,它都被分割成4个大小相同的小正方形。接下来的每一个正方形都以相同的方式进行分区,最大限度为原始大小的1/1024。下面是一个小例子:

问题是,我不确定如何以最佳方式存储这些数据。我需要存储每一块的大小,以便它知道分割后应该缩小到什么大小。例如,如果在第一次触摸和第一次除法之后,我的数组(16元素限制)将如下所示:

0 0 1 1 
0 0 1 1
2 2 3 3 
2 2 3 3 
然后,如果我触摸左上角的正方形,下一个数组将如下所示:

[0,0] [0,1] 1 1 
[0,2] [0,3] 1 1
   2     2  3 3
   2     2  3 3

或者至少我能想到的就是这个。然而,这看起来很复杂,在下一次迭代中会引入额外的维度,我真的不确定如何正确地实现它。有什么想法吗?

如果是关于保存正方形坐标的最佳方式,我更喜欢定义一个自定义类,该类有4个属性:Xtopleft、Ytopleft、Xbottomright、Ybottomright(我们称之为SquarePosition),并将所有正方形位置对象放在一个集合中,例如SquarePosition集合

当然,您需要重写自定义类的equals方法

例如,您有如下方形板:

1233

4 5 3 3

6 6 7 7

6 6 7 7

您可以按如下方式设置集合:
{(1,1)、(1,1)}、{(2,1)、(2,1)}、{(3,1)、(4,2)}、{(1,2)、(1,2)}、{(2,2)}、{(1,3)、(2,4)}、{(3,3)、(4,4)}使用四叉树。伪代码如下所示:

public class QuadTree {
    private QuadTree[] children;
    private double x;
    private double y;
    private double size;

    public QuadTree(double x, double y, double size) {
        this.x = x;
        this.y = y;
        this.size = size;
    }

    public void divide() {
        if (children == null) {
            children = new QuadTree[4];
            double s = 0.5 * size;
            children[0] = new QuadTree(x, y, s);
            children[1] = new QuadTree(x + s, y, s);
            children[2] = new QuadTree(x, y + s, s);
            children[3] = new QuadTree(x + s, y + s, s);
        }
    }

    public QuadTree getChild(int index) {
        if (children == null)
            return null;
        else
            return children[index];
    }

您可以将初始变量设为1024(如您所维护的)并将其除以2,然后在触摸后将结果分配给每个分隔的方块。
我不确定如何以最佳方式存储此数据。
首先定义一个目标函数进行优化。@vrundpurohit这不起作用,因为在那之后,我将无法区分哪个正方形位于何处,因为相邻的单元格将具有相同的数组值。这正是我想要的。谢谢