循环平铺以旋转矩阵

时间:2010-10-06 20:29:56

标签: c performance rotation

我正在尝试使用循环平铺技术编写一个旋转图像矩阵的函数。但是,我遇到了让它正常工作的一些问题。

编辑: 这是我的更新代码,但只有当n是块大小的倍数时才有效。我将如何处理不同的矩阵尺寸?现在,我只是使用方块,它对那些方块非常有效。我将如何改变它以使用基于我给出的数组大小的矩形块。具体来说,如果给出一个n×n数组,如何选择矩形块尺寸将其拆分成?

  //Block size to tune
  int block = 20;
  int i1, j1, k1,  i, j, k;

  for(i1 = 0; i1 < n; i1 += block) {
    for(j1 = 0; j1< n; j1 += block) {
            for(i = i1; i < i1 + block; i++){
                for(j = j1; j < j1 + block; j++){
                    dest[getInd(j, i, n)] = src[getInd(i, n - 1 - j, n)]; 

                }
            }
        }
    }

}

1 个答案:

答案 0 :(得分:1)

前两个for循环看起来不对:

  for(i1 = 0; i1 < n/block; i1 += block) {
    for(j1 = 0; j1< n/block; j1 += block) {

应该是:

  for(i1 = 0; i1 < n; i1 += block) {
    for(j1 = 0; j1 < n; j1 += block) {

当这个问题得到纠正时,您可能只需要在调试器中单步执行代码来解决其他需要修复的问题。