二维数组可模拟离散二维坐标系,行对应y、列对应x,arry存储点(x,y)状态;原点(0,0)映射左上角,y向下增长;需初始化并检查索引越界。

二维数组可以模拟一个离散的二维坐标系,其中行和列分别对应 y 和 x 方向(或按需互换),每个元素代表该坐标位置的状态(如是否被占用、颜色值、障碍物标记等)。
坐标与数组索引的映射关系
通常将数组 arr[y][x] 视为坐标系中点 (x, y) 的存储位置。注意:数组第一维常表示行(y),第二维表示列(x),因此索引顺序与数学坐标 (x, y) 相反。例如:
- 点 (2, 3) 对应 arr[3][2](假设 y 向下为正,x 向右为正)
- 若希望更贴近直觉,也可定义 arr[x][y],但需全程统一并注意内存布局和遍历习惯
- 原点 (0, 0) 一般映射到数组左上角 arr[0][0],y 轴向下增长,符合多数屏幕坐标惯例
初始化与边界处理
创建固定大小的坐标系,需明确范围和默认状态:
- 声明如 int grid[HEIGHT][WIDTH],并用循环或 memset 初始化为 0(空闲/无物)
- 访问前必须检查索引是否越界:0 ≤ x
- 可封装安全读写函数,例如 setPoint(x, y, value) 内部做范围判断,避免崩溃
常见操作示例
在该坐标系上实现基础功能无需额外库,纯逻辑即可:
- 绘制点:直接赋值 grid[y][x] = 1
- 绘制线段:用 Bresenham 算法或简单插值得到整数坐标序列,逐点设值
- 矩形填充:双重循环遍历 x∈[x1,x2], y∈[y1,y2] 区域
- 邻域查询:遍历 (y±1, x±1) 共 8 个方向,注意跳过越界坐标
扩展考虑:支持负坐标或动态范围
标准二维数组天然只支持非负索引,若需负坐标(如 (-5,-5) 到 (5,5)),有几种实用方式:
- 偏移法:申请足够大的数组(如 [100][100]),约定中心点 (0,0) 对应 arr[50][50],所有坐标加偏移量再访问
-
哈希映射:改用 map
, T> 或自定义哈希表,按需存稀疏点,节省空间但随机访问稍慢 -
动态二维容器:如 vector
>,可运行时 resize,但需手动管理行列长度











