我正在处理涉及数组矩阵的复杂问题。通常我认为矩阵具有行索引和列索引。
matrix[row][column]
但对于这个特殊问题,我认为在笛卡尔坐标的背景下考虑它会更有用。虽然我这样做但是我注意到有一些不同的问题,即矩阵索引只能是正整数而不是可以跨越任何方向的笛卡尔坐标。我也发现自己对x和y作为索引如何映射到行和列作为索引有点困惑。
二维笛卡尔坐标网格与数组矩阵之间的关系是什么?
答案 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];
}
}
}