Graphics的平移与旋转

平移函数translate(double x,double y);
旋转函数rotate(double arc,double x,double y)//第一个参数是旋转角度,后二个参数是旋转中心点的横纵坐标参数java

package DrawTest;

import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.awt.geom.Arc2D;
import java.awt.geom.Line2D;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;



@SuppressWarnings("serial")
public class LineTest2 extends JPanel{

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        JFrame frame = new JFrame();
        frame.setLayout(new GridLayout(1,2,0,0));
        frame.setBounds(230, 30, 900, 950);
        LineTest2 panel = new LineTest2();
        panel.setPreferredSize(new Dimension(900,900));
        frame.add(panel);
        frame.setResizable(false);//设置frame不可调
        frame.setVisible(true);
    }

    public void paintComponent(Graphics g){
        super.paintComponent(g);
        Graphics2D g2 =(Graphics2D)g;
        drawLine(g2,50, 150, 100, 150);
        drawLine(g2,150, 150, 200, 150);
        drawArc(g2,100, 175, 50, 50, 0, -180);//画圆弧函数:前两个数字表示圆外切矩形的左上角坐标,中间两个数字表示外切矩形的宽和高度,后两个数字表示弧起始角和跨越角度

    }
    public void drawLine(Graphics2D g,double x1,double y1,double x2,double y2){
        BasicStroke bs_1=new BasicStroke(2,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
        g.setStroke(bs_1);
        g.setColor(Color.RED);
        AffineTransform transform = new AffineTransform();
        AffineTransform transform_1 = new AffineTransform();
        AffineTransform transform_2 = new AffineTransform();
        AffineTransform transform_3 = new AffineTransform();

        Line2D line = new Line2D.Double(x1, y1, x2, y2);
        g.draw(line);
        transrota(g,transform,line);

        transform_1.translate(0, 250);
        g.setTransform(transform_1);
        g.draw(line);
        transrota(g,transform_1,line);

        transform_2.translate(0, 500);
        g.setTransform(transform_2);
        g.draw(line);
        transrota(g,transform_2,line);

        transform_3.translate(0, 0);
        g.setTransform(transform_3);
    }

    public void drawArc(Graphics2D g,double x1,double y1,double w,double h,double x2,double y2){
        AffineTransform transform = new AffineTransform();
        AffineTransform transform_1 = new AffineTransform();
        AffineTransform transform_2 = new AffineTransform();
        AffineTransform transform_3 = new AffineTransform();

        Arc2D arc = new Arc2D.Double(x1, y1, w, h, x2, y2, Arc2D.OPEN);
        g.draw(arc);//画圆弧函数:前两个数字表示圆外切矩形的左上角坐标,中间两个数字表示外切矩形的宽和高度,后两个数字表示弧起始角和跨越角度,最后表示圆弧的闭合方式
        transrota(g,transform,arc);

        transform_1.translate(0, 250);
        g.setTransform(transform_1);
        g.draw(arc);
        transrota(g,transform_1,arc);

        transform_2.translate(0, 500);
        g.setTransform(transform_2);
        g.draw(arc);
        transrota(g,transform_2,arc);

        transform_3.translate(0, 0);
        g.setTransform(transform_3);
    }

    public void transrota(Graphics2D g2,AffineTransform transform,Shape line){
        for(int i=0;i<1;i++){
            transform.translate(300, 0);
            g2.setTransform(transform);
            g2.draw(line);
        }
        transform.rotate(Math.PI, 200, 187.5); // 围绕(200, 187.5)点旋转图形180度
        g2.setTransform(transform);
        g2.draw(line);
        for(int i=0;i<1;i++){
            transform.translate(300, 0);
            g2.setTransform(transform);
            g2.draw(line);
        }
    }
}