在Java中实现正方形分区
我面临一个概念上的问题。我想实现一个Android游戏,其中一个功能是:每次我触摸一个正方形,它都被分割成4个大小相同的小正方形。接下来的每一个正方形都以相同的方式进行分区,最大限度为原始大小的1/1024。下面是一个小例子: 问题是,我不确定如何以最佳方式存储这些数据。我需要存储每一块的大小,以便它知道分割后应该缩小到什么大小。例如,如果在第一次触摸和第一次除法之后,我的数组(16元素限制)将如下所示:在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 然后,如果我触摸
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这不起作用,因为在那之后,我将无法区分哪个正方形位于何处,因为相邻的单元格将具有相同的数组值。这正是我想要的。谢谢