具有乘法和加法的对齐(偏移 - 移位)数组

时间:2017-04-19 13:34:20

标签: c arrays function

我有两个数组,我想将它们相乘,然后添加结果以形成输出数组。但我需要将第一个数组移动到其中心与第二个数组的左上角元素重叠的位置,然后相乘并将结果相加并将其放在输出数组的第一个元素中。然后对所有元素重复该过程。 链接中的图片解释了我的意思:

https://drive.google.com/open?id=0B21Hup_IhGDddmFJRDZZaWR3QUE

我为数组的特定元素尝试了一个特定的答案,只是为了得到这个想法,但我需要将这个想法应用于任何两个数组!

我的代码:

#include <stdio.h>
#define XKERN 3
#define YKERN 3
#define XMAX 3
#define YMAX 4

int main(void) {
    int input[XMAX][YMAX] = {{1,2,3,4}, {5,6,7,8}, {9, 10, 11, 12}};
    int fkern[XKERN][YKERN] = {{3,2,1},{0,0,0},{-3,-2,-1}};
    int output[XMAX][YMAX];
    int ofsx,ofsy,total,fkx,fky,i,j,ix,jy;
    for(i=0;i< XMAX;i++)
    {
        for(j=0;j< YMAX;j++,total=0)  
        {
            ofsx=i;
            ofsy=j;
            for(jy=0,fky=0;jy< YMAX||fky< YKERN;jy++,fky++ )
            {
                for(ix=0,fkx=0;ix< XMAX||fkx< XKERN;ix++,fkx++)
                {
                    if((ofsx-ix)>=-1 && (ofsx-ix)<=1 &&  \
                        (ofsy-jy)>=-1 && (ofsy-jy)<=1 && \
                        ((ofsx+fkx)-1)>=0 && ((ofsx+fkx)-1)<=XMAX && \
                        ((ofsy+fky)-1)>=0 && ((ofsy+fky)-1)<=YMAX)

                    {
                        total=total+(input[ix][jy]*fkern[fkx][fky]);
                    }
                 }
                 output[i][j]=total;
                 printf("[%d][%d]=%d\n",i,j,output[i][j]);
             }
         }

     return 0;
 }

如果你帮助我,我将非常感激。

0 个答案:

没有答案