如何将像素图像(从2D阵列创建)旋转90°;正确的?JAVA

如何将像素图像(从2D阵列创建)旋转90°;正确的?JAVA,java,arrays,image-generation,stddraw,Java,Arrays,Image Generation,Stddraw,我试图用递归的方法从2D数组中创建一个像素“景观”。我已经生成了随机的基础景观(草地和岩石),并且必须添加一条从上到下流动的河流。然而,它不是从上到下,而是从左到右。我试着改变方块的位置,但没用。任何帮助都将不胜感激 这是生成的图像:[当前代码的输出][1] 最初的方法调用是simWaterFlow(横向,0,50) private static void-simWaterFlow(颜色[][]横向、内行、内列){ 如果(行>=横向长度){ 返回; } 如果(横向[行][col]==Color.

我试图用递归的方法从2D数组中创建一个像素“景观”。我已经生成了随机的基础景观(草地和岩石),并且必须添加一条从上到下流动的河流。然而,它不是从上到下,而是从左到右。我试着改变方块的位置,但没用。任何帮助都将不胜感激

这是生成的图像:[当前代码的输出][1]

最初的方法调用是simWaterFlow(横向,0,50)

private static void-simWaterFlow(颜色[][]横向、内行、内列){
如果(行>=横向长度){
返回;
}
如果(横向[行][col]==Color.DARK_GRAY){//当湿岩被撞击时,水停止流动
返回;
}
双尺寸=画布尺寸/横向.长度;//正方形的长度
双X轴=大小/2+列*大小;
双Y轴=画布尺寸-(尺寸/2+行*尺寸);
double flow=myRand.nextDouble();
//标准水流
if(横向[行][col]==Color.GREEN | |横向[行][col]==Color.BLUE){
横向[行][列]=颜色.蓝色;
深蓝色(深蓝色);
标准填充正方形(X轴,Y轴,尺寸/2);
//水向左或向右流动的几率为50%
如果(水流岩石变湿-->水流分成2段
if(横向[行][列]==颜色.灰色){
横向[行][列]=颜色.深灰色;
深灰色(深灰色);
标准填充正方形(X轴,Y轴,尺寸/2);
//水的分裂
simWaterFlow(景观、行、列+1);
simWaterFlow(景观,世界其他地区,col-1);
}
}
´´´
[1]: https://i.stack.imgur.com/9wpp6.png

是否尝试交换行和列参数值?而不是
simWaterFlow(scape,row,col)
调用
simWaterFlow(scape,col,row)
。我做了,但是在第二个if语句以及所有其他调用中,我得到了一系列越界错误。您是否也交换这两个递归方法调用中的参数?也只有在网格是二次的情况下才有效。但是如果您可以在之后继续旋转,请看一看。我发现了问题!我忽略了此方法是s为了生成数组而不是绘制数组,实际的绘制部分是在另一种方法中完成的,在这种方法中,参数进行了切换。谢谢您的回复!
private static void simWaterFlow(Color[][] landscape, int row, int col) {
if (row>= landscape.length){
            return;
        }
        if (landscape[row][col]==Color.DARK_GRAY){ //water stops when a wet rock is hit
            return;
        }

        double size= canvasSize/ landscape.length;//length of square
        double xAxis=size/2+col*size;
        double yAxis=canvasSize-(size/2+row*size);
        double flow=myRand.nextDouble();

        //standard waterflow
        if(landscape[row][col]==Color.GREEN||landscape[row][col]==Color.BLUE){
            landscape[row][col]= Color.BLUE;
            StdDraw.setPenColor(StdDraw.BLUE);
            StdDraw.filledSquare(xAxis,yAxis,size/2);

            //50% chance for water to flow either left or right
            if (flow<0.5){
                simWaterFlow(landscape, row+1, col + 1);
            }else{
                simWaterFlow(landscape, row+1, col - 1);
            }

        }

        //if water hits rock --> rock gets wet --> waterflow splits in 2
        if(landscape[row][col]==Color.GRAY){
            landscape[row][col]= Color.DARK_GRAY;
            StdDraw.setPenColor(StdDraw.DARK_GRAY);
            StdDraw.filledSquare(xAxis,yAxis,size/2);

            //splitting of water
            simWaterFlow(landscape, row, col + 1);
            simWaterFlow(landscape,row,col-1);
        }




    }
´´´


  [1]: https://i.stack.imgur.com/9wpp6.png