Graphics的平移与旋转

本文介绍了Java中进行图形平移和旋转的基本方法。通过调用translate()函数实现图形的水平和垂直平移,使用rotate()函数则可以指定旋转角度及旋转中心,实现图形的旋转效果。
部署运行你感兴趣的模型镜像

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

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);
        }
    }
}

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值