Arrays 二维笛卡尔坐标网格和阵列矩阵之间的关系是什么?

Arrays 二维笛卡尔坐标网格和阵列矩阵之间的关系是什么?,arrays,matrix,Arrays,Matrix,我正在处理一个涉及数组矩阵的复杂问题。通常我认为矩阵有行索引和列索引 matrix[row][column] 但是对于这个特殊的问题,我认为在笛卡尔坐标系下考虑它会更有用。当我这样做的时候,我注意到有一些不同的问题,比如矩阵索引只能是正整数,而笛卡尔坐标可以跨越任何方向。我还发现自己对x和y作为索引如何映射到作为索引的行和列有点困惑 二维笛卡尔坐标网格和数组矩阵之间的关系是什么?您主要关心的是如何使用Java二维数组表示笛卡尔坐标系。这其中令人困惑的部分是如何处理负坐标,因为Java数组只能由

我正在处理一个涉及数组矩阵的复杂问题。通常我认为矩阵有行索引和列索引

matrix[row][column]
但是对于这个特殊的问题,我认为在笛卡尔坐标系下考虑它会更有用。当我这样做的时候,我注意到有一些不同的问题,比如矩阵索引只能是正整数,而笛卡尔坐标可以跨越任何方向。我还发现自己对x和y作为索引如何映射到作为索引的行和列有点困惑


二维笛卡尔坐标网格和数组矩阵之间的关系是什么?

您主要关心的是如何使用Java二维数组表示笛卡尔坐标系。这其中令人困惑的部分是如何处理负坐标,因为Java数组只能由正数索引。下面是一个包含二维整数数组的类
CartesianGrid
。该数组可以用任意范围的笛卡尔坐标进行初始化。getter和setter偏移负坐标以映射到Java期望的数组范围

public class CartesianArray {
    private int[][] grid;
    private int minX, minY;
    private int sizeX, sizeY;

    public CartesianArray(int minX, int minY, int maxX, int maxY) {
        this.minX = minX;
        this.minY = minY;
        sizeX = maxX - minX + 1;
        sizeY = maxY - minY + 1;
        grid = new int[sizeX][sizeY];
    }

    public void setPoint(int xCart, int yCart, int value) {
        int x = xCart - xMin; // offset negative x value
        int y = yCart - yMin; // offset negative y value

        // check for out of bounds coordinates
        if (x < 0 || x >= sizeX || y < 0 || y >= sizeY) {
            throw new Exception("Cannot set a point outside the grid.");
        } else {
            grid[x][y] = value;
        }
    }

    public int getPoint(int xCart, int yCart) {
        int x = xCart - xMin; // offset negative x value
        int y = yCart - yMin; // offset negative y value

        if (x < 0 || x >= sizeX || y < 0 || y >= sizeY) {
            throw new Exception("Cannot get a point outside the grid.");
        } else {
            return grid[x][y];
        }
    }
}
公共类CartesianArray{
私有int[][]网格;
私家侦探;
私人int sizeX,sizeY;
公共CartesianArray(int-minX,int-minY,int-maxX,int-maxY){
this.minX=minX;
this.minY=minY;
sizeX=maxX-minX+1;
sizeY=maxY-minY+1;
网格=新整数[sizeX][sizeY];
}
公共无效设定点(int xCart、int yCart、int值){
int x=xCart-xMin;//偏移负x值
int y=yCart-yMin;//偏移负y值
//检查越界坐标
如果(x<0 | | x>=sizeX | | y<0 | | y>=sizeY){
抛出新异常(“无法设置网格外的点”);
}否则{
网格[x][y]=值;
}
}
公共int getPoint(int-xCart,int-yCart){
int x=xCart-xMin;//偏移负x值
int y=yCart-yMin;//偏移负y值
如果(x<0 | | x>=sizeX | | y<0 | | y>=sizeY){
抛出新异常(“无法获取网格外的点”);
}否则{
返回网格[x][y];
}
}
}

这些关系是您定义的任何关系。如果您希望
矩阵[1][1]
表示点
(1,1)
,请单击“酷”。您还可以将其定义为点
(-5,-5)