将矩形划分为正方形

时间:2017-03-17 03:24:24

标签: java hashmap grid coordinates

我有一个矩形,坐标A,B,C,D分别具有坐标:

A->(3,9)
B->(6,9)
C->(6,6)
D->(3,6)

其中A是左上角坐标,D是左下角坐标。

我想将矩形划分为25个网格,并为每个网格分配一个数字。例如grid

所以我尝试了

double width =  6-3=3;
double height = 9-6=3;

grid width=3/5=0.6
grid height=3/5=0.6

现在我想为网格分配一个id和它们的坐标,如

1  ->  (3,9),(3.6,9),(3.6,8.4),(3,8.4)

等等。

所以我正在实现一个哈希映射来存储信息。

HashMap<Integer, Double[]> hmap = new HashMap<Integer, Double[]>();

但我很困惑如何获得网格ID和

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

表示网格数据结构的最简单方法是使用网格所包含的数据类型的二维数组,您可以声明一个类似

的数据类型
Double[][] grid = new Double[5][5]

这基本上是一个数组的数组5个数组或5个数组,简单地放5行5列。当您以这种方式构建数据时,它可以很容易地找到该网格中的特定方块并更新/查看它们或迭代整个网格中的每个方块,每一行,每一列等。您可以继续迭代2d数组是使用两个嵌套循环。外部代表您拥有的行数,内部代表每行的记录或数据的数量,例如,对于上面的网格,您可以拥有

for(int i = 0; i < 5; i++){
    for(int j = 0; j < 5; j++){
        System.out.println(grid[i][j].toString());
    }
}

上面的代码命中每个方块并在网格中打印该方格数据的内容。如果你想例如从2d切换到3d,你会有3个嵌套,一个做一行,另一个做一个正方形得到一个平面而另一个去做z以获得深度然后你会有一个易于访问和迭代的三维数据结构。我刚刚完成了使用2d JButton阵列制作国际象棋的游戏,所以如果你有任何其他问题,请告诉我。

答案 1 :(得分:0)

您可以通过简单的双循环生成ids和(36)坐标:

public static void main(String[] args) {

    Map<Integer, double[]> hmap = new HashMap<>();

    int id = 0;
    for (double height = 9.0 ; height >= 6.0; height -=0.6) {

        for (double width = 3.0 ; width <= 6.0; width+=0.6) {

            hmap.put(id++, new double[] {width, height}) ;
        }
    }

    //output 
    for(Integer iD : hmap.keySet()) {

        System.out.printf("%2d  %3.2f %s %3.2f \n",iD,hmap.get(iD)[0],"-",hmap.get(iD)[1]);
    }
}