int kernel_x;
int kernel_y;
int mat_x;
int mat_y;
int **kernel;
int **mat;
int pos_archor_x;
int pos_archor_y;
void getValue(int pos_x,int pos_y)
{
int temp_x_kernel_start,temp_x_kernel_end;
int temp_y_kernel_start,temp_y_kernel_end;
if(pos_x>=pos_archor_x)
temp_x_kernel_start=0;
else
temp_x_kernel_start=pos_archor_x-pos_x;
if(mat_x-pos_x>=kernel_x-pos_archor_x)
temp_x_kernel_end=kernel_x-1;
else
temp_x_kernel_end=mat_x-1-pos_x+pos_archor_x;
if(pos_y>=pos_archor_y)
temp_y_kernel_start=0;
else
temp_y_kernel_start=pos_archor_y-pos_y;
if(mat_y-pos_y>=kernel_y-pos_archor_y)
temp_y_kernel_end=kernel_y-1;
else
temp_y_kernel_end=mat_y-1-pos_y+pos_archor_y;
cout<<"start"<<"("<<temp_x_kernel_start<<","<<temp_y_kernel_start<<")"<<'\t'<<"end"<<"("<<temp_x_kernel_end<<","<<temp_y_kernel_end<<")"<<endl;
int all=0;
int x=0;
for(int i=temp_x_kernel_start;i<=temp_x_kernel_end;++i)
{
int y=0;
for(int j=temp_y_kernel_start;j<=temp_y_kernel_end;++j)
{
cout<<"("<<pos_x-(pos_archor_x-temp_x_kernel_start)+x<<','<<pos_y-(pos_archor_y-temp_y_kernel_start)+y<<")"<<endl;
all+=kernel[i][j]*mat[pos_x-(pos_archor_x-temp_x_kernel_start)+x][pos_y-(pos_archor_y-temp_y_kernel_start)+y];
cout<<all<<endl;
y++;
}
x++;
}
mat[pos_x][pos_y]=all;
}
int main()
{
cout<<"input the kernel size"<<endl;
cout<<"input the kernel'x lenth"<<endl;
cin>>kernel_x;
cout<<"input the kernel'y lenth"<<endl;
cin>>kernel_y;
kernel=new int*[kernel_x];
for(int i=0;i!=kernel_x;++i)
kernel[i]=new int[kernel_y];
cout<<"please input the kernel"<<endl;
for(int i=0;i!=kernel_x;++i)
for(int j=0;j!=kernel_y;++j)
cin>>kernel[i][j];
cout<<"input the mat size"<<endl;
cout<<"input the mat'x lenth"<<endl;
cin>>mat_x;
cout<<"input the mat'y lenth"<<endl;
cin>>mat_y;
mat=new int*[mat_x];
for(int i=0;i!=mat_x;++i)
mat[i]=new int[mat_y];
cout<<"please inpute the mat"<<endl;
for(int i=0;i!=mat_x;++i)
{
for(int j=0;j!=mat_y;++j)
cin>>mat[i][j];
}
pos_archor_x=0;
pos_archor_y=1;
for(int i=0;i!=mat_x;++i)
for(int j=0;j!=mat_y;++j)
getValue(i,j);
}