lançando um array multi-dimensional java

Eu tenho uma classe que cria uma tela de caracteres com uma largura e altura desejada.

dentro deste eu tenho um método drawLetter () (que basicamente altera os caracteres para que uma letra aparece na tela (como arte ASCII muito simples)

Eu tenho 3 outros métodos rotateClockwise, flipHorizontal e flipVertical

girar e flipHorizontal eu fiz bem e eles funcionam, mas eu não consigo descobrir onde estou errado com lançando o array verticalmente (por interesse eu acho que eu tenho horizontal e vertical o caminho errado mas mal colocar uma amostra do que estou tentando para ser feito abaixo)

isso é o que eu não posso resolver:

isto:

# # # ~
~ # ~ ~
~ # ~ ~
~ ~ ~ ~

para isso:

~ # # #
~ ~ # ~
~ ~ # ~
~ ~ ~ ~

obviamente, isso será feito em um loop for como os meus outros métodos, abaixo eu vou postar o método que já fiz para horizontal e girar no sentido horário para provar que não é lição de casa que eu não posso fazer

void mirrorHorizontally()
{
    char[][]horizontalImage = new char[height][width];

    for (int i = 0; i < height /2; i++)
    { 
       for(int j = 0; j < width; j++)
       {  
           horizontalImage[height - (i+1)][j] = canvasArray[i][j];           
           horizontalImage[i][j] = canvasArray[height - (i+1)][j];
       }
    }   
    printPicture(horizontalImage);
}


void rotateClockwise()
{
    char[][] rotatedImage = new char[height][width];

    for(int i=0; i< canvasArray.length; i++)
    {
        for(int j= canvasArray.length-1; j >= 0; j--)
        {
            rotatedImage[i][rotatedImage.length-1-j] = canvasArray[j][i]; 
        }
    }

    printPicture(rotatedImage);
}

canvasArray é a imagem original fora de interesse em uma variável de classe char [] []

questionAnswers(1)

yourAnswerToTheQuestion