该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我用Graphics2D对像旋转一个自绘制的矩形,代码可以旋转,但是出了个问题!这个矩形在旋转的时候并不是按照它自己的中心点旋转,而是围绕着它的左上角在转。我的意图是想让它围绕自己的中心点做自转运动,但代码怎么改也实现不了,有高手可以解决一下吗?
/* 主类名: Rotate{} */
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.awt.Graphics.*;
import java.util.*;
import java.awt.image.BufferedImage;
class Rotate extends JFrame implements Runnable{
Image bkimg =new BufferedImage(180,200,7);
Graphics bkdc = bkimg.getGraphics();//
double x0=1024/2, y0=800/2, xp,yp, nowR, radio = 15.0;
Graphics mdc; Graphics2D mdc2;
public Rotate(){
InitPic(); //初始画一个矩形
this.setBounds(0,0,1024,800);
this.setBackground(Color.black);
this.setDefaultCloseOperation(3);
this.setVisible(true);
new Thread(this).start();
}
private void InitPic(){
for(int i=0;i<12;i++){
bkdc.setColor(new Color(i*40%255,i*60%240,240-i*80%240));
bkdc.fill3DRect(i*10,i*10,180-i*20,200-i*20,true);
}
}
public void run(){
while(true){
try{Thread.currentThread().sleep(10);}catch(InterruptedException err){}
radio = (radio>=360.0 ? 0 : radio+1.0);
RotBitmap();
}
}
private void RotBitmap(){
setTitle("现在的角度是:" + radio);
nowR = radio * 3.14159265859 / 180;
mdc2 = (Graphics2D)getGraphics();
xp = Math.sin(nowR);yp = Math.cos(nowR);
if(radio>0 && radio<=180){
xp = -xp; yp=-yp;
} else {
yp= -yp; xp= -xp;}
mdc2.translate(x0+=xp,y0-=yp);
mdc2.rotate(nowR);
if(bkimg!=null)mdc2.drawImage(bkimg,0,0,null);
mdc2.dispose();
}
public static void main(String[] ag){
Rotate demo = new Rotate();
}
}