2d笛卡尔坐标网格与数组矩阵之间的关系是什么?

时间:2015-04-01 16:36:36

标签: arrays matrix

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

matrix[row][column]

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

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

1 个答案:

答案 0 :(得分:1)

您的主要关注点似乎是如何使用Java二维数组表示笛卡尔坐标系。令人困惑的部分是如何处理负坐标,因为Java数组只能通过正数进行索引。这是一个类CartesianGrid,它包含一个2D整数数组。可以使用任何范围的笛卡尔坐标初始化数组。 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];
        }
    }
}