算法实现
使用算法实现输出大矩形里的某一位置的小矩形
需求:
- 实现游戏中人物动,地图移动
- 卷积卷矩阵相乘要求等
算法原理:
本算法使用c语言实现,利用了C语言二维数组的特性:
二位数组可以视为有行和列二维表;
本算法利用行和列的关系巧妙的输出该二维表某一个区域的小矩形
由于本人图画的不是很好,所以就没有画图
代码:
- 输出一维数组:
void PrintArr(int* arr,int lenth){
for(int i=0;i<lenth;i++)
printf("%d ",arr[i]);
printf("\n");
}
- 从某一个二维数组中输出某一个矩形
/*
矩阵输出函数 MatrixOutput(int map[][10],int x,int y,int w,int h)
map——》基于哪个矩阵进行输出 后面的10可以根据需求更改
x,y——》输出矩阵的中心
w,h——》要输出的矩阵宽和高
无返回值
*/
void MatrixOutput(int map[][10],int x,int y,int w,int h){
for(int i=0;i<h;i++){
PrintArr(map[y-h/2+i]+x-w/2,w);
}
}
- 总代码(使用随机函数进行功能测试):
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void PrintArr(int* arr,int lenth){
for(int i=0;i<lenth;i++)
printf("%d ",arr[i]);
printf("\n");
}
/*
矩阵输出函数 MatrixOutput(int map[][10],int x,int y,int w,int h)
map——》基于哪个矩阵进行输出
x,y——》输出矩阵的中心
w,h——》要输出的矩阵宽和高
无返回值
*/
void MatrixOutput(int map[][10],int x,int y,int w,int h){
for(int i=0;i<h;i++){
PrintArr(map[y-h/2+i]+x-w/2,w);
}
}
int main(){
//定义一个10x10的大数组
int map[10][10]={0};
//为数组随机赋值
srand((unsigned)time(NULL));
for(int i=0;i<10;i++){
for(int j=0;j<10;j++)
map[i][j]=rand()%10;
}printf("10x10的数组内容为:\n");
for(int i=0;i<10;i++){
PrintArr(map[i],10);
}
//输出中心4x4矩阵
printf("中心4x4矩阵为:\n");
MatrixOutput(map,5,5,4,4);
}
运行结果:
最后:
希望以上代码对大家有所帮助😀😀😀😀