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