如何围绕它旋转2D像素阵列" center"

时间:2017-10-16 15:30:41

标签: java arrays rotation

我已经获得了一个2D像素阵列,我想根据像素阵列围绕它的最中心点旋转这个图像。我试图实现基于旋转矩阵旋转图像的代码,但到目前为止我还没有成功。

当前2D阵列旋转代码:

        int width = originalImage.length;
        int height = originalImage[0].length;

        final double angle = 90;

        int[][] array = new int[width][height];

        double c = Math.cos(Math.toRadians(angle));
        double s = Math.sin(Math.toRadians(angle));
        int x = width / 2;
        int y = height / 2;

        for (int xx = 0; xx < width; xx++) {
            for (int yy = 0; yy < height; yy++) {
                int xp = xx - x;
                int yp = yy - y;

                int xa = (int)((float)((float)xp * c - (float)yp * s));
                int ya = (int)((float)((float)xp * s + (float)yp * c));

                xa += x;
                ya += y;

                xp += x;
                yp += y;


                if(xa < width && ya < height) array[xa][ya] = originalImage[xp][yp];
                //System.out.print("\n"+xa+" "+ya);
            }
        }

我也试过这个:

        int[][] array = new int[originalImage.length][originalImage[0].length];

        int xx = 0, yy = 0;

        for (int x = originalImage.length - 1; x >= 0; x--) {
            xx = 0;
            for (int y = 0; y < originalImage[x].length; y++) {
                //System.out.println(array[yy][xx]);
                //System.out.println(originalImage[y][x]);
                if (y < originalImage.length && x < originalImage[x].length) {
                    array[yy][xx] = originalImage[y][x];
                    //System.out.print(array[yy][xx]);
                }

                xx++;
            }
            yy++;
        }

是否有任何建议可以改进我的代码,或者应该如何完成?

1 个答案:

答案 0 :(得分:0)

因为你旋转了90度,你可以跳过一点

// origin to center point
int xp = xx - x; 
int yp = yy - y;

// rotation and origin back to (0,0)
int x_rotated = -yp + y;
int y_rotated = xp + x;

//
array[x_rotated][y_rotated] = originalImage[xx][yy];

如果要以不同的方向旋转,请更改

int x_rotated = yp + y;
int y_rotated = -xp + x;