将一个二维数组旋转90度 用Java编写代码

Python013

将一个二维数组旋转90度 用Java编写代码,第1张

#include<stdio.h>

#define N 4

int a[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}

void prt()

{int i,j

for(i=0i<Ni++)

{

for(j=0j<Nj++)

printf("%4d",a[i][j])

printf("\n")

}

}

int main()

{int i,j,k,t

printf("原来的数组:\n")

prt()

for(i=0i<=N/2i++)

for(j=ij<N-i-1j++)

{

t=a[i][j]

a[i][j]=a[j][N-1-i]

a[j][N-1-i]=a[N-1-i][N-1-j]

a[N-1-i][N-1-j]=a[N-1-j][i]

a[N-1-j][i]=t

}

printf("\n顺时针旋转90度后的数组:\n")

prt()

getch()

return 0

}

一般用Graphic2D 来实现

g2d 里有rotate、translate、scale方法

代码片段如下:

@Override

public void paintComponent(Graphics g){

Graphics2D g2 = (Graphics2D)g

g2.rotate(Math.toRadians(45))

g2.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), null)

}

import javax.swing.*

import javax.imageio.*

import java.awt.*

import java.awt.image.*

import java.awt.geom.*

import java.io.*

/**

* @author Hardneedl

*/

class ImageTransform extends JFrame {

private static final Dimension minSize = new Dimension(900, 800)

private static final Dimension maxSize = new Dimension(900, 800)

private static final Dimension preferredSize = new Dimension(900, 800)

public Dimension getMaximumSize() {return maxSize}

public Dimension getMinimumSize() {return minSize}

public Dimension getPreferredSize() {return preferredSize}

public String getTitle() {return "Frame Title"}

private class Canvas extends JComponent{

private BufferedImage img

private AffineTransform trans=new AffineTransform()

private void setImage(BufferedImage img){

if(img!=null) this.img = img

if(isVisible())  paintImmediately(0,0,getWidth(),getHeight())

}

private void setRota(double rota){

trans.setToRotation(rota, (getWidth())>>1, ( getHeight()  )>>1 )

if(isVisible())  paintImmediately(0,0,getWidth(),getHeight())

}

protected void paintComponent(Graphics g) {

super.paintComponent(g)

g.setColor(Color.BLUE)

g.fillRect(0,0,getWidth(),getHeight())

if (img==null)return

Graphics2D gg= (Graphics2D)g.create()

int iw = img.getWidth(), ih = img.getHeight()

int anchorX = (getWidth()- iw)>>1, anchorY = (getHeight() - ih)>>1

AffineTransform af = gg.getTransform()

af.translate(anchorX, anchorY)

af.concatenate(trans)

gg.drawImage(img,af,this)

gg.dispose()

}

}

private Canvas canvas = new Canvas()

ImageTransform() throws HeadlessException {

init()

doLay()

attachListeners()

}

private void init() {

try {

canvas.setImage(ImageIO.read(new File("1.png")))

canvas.setRota(Math.PI/3)

} catch (IOException e) {

e.printStackTrace()

}

}

private void doLay() {

Container container = getContentPane()

container.add(canvas,BorderLayout.CENTER)

pack()

}

private void attachListeners() {

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

}

public static void main(String[] args) throws IOException {

new ImageTransform().setVisible(true)

}

}