椭圆扫描转换:中点画椭圆(Graphics坐标系的变换)

import javax.swing.*;
import java.awt.*;
import java.util.*;
public class Test extends JPanel { 
	static int a;
	static int b;
    
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D)g;
        g2d.translate(getWidth() / 2, getHeight() / 2);
        g2d.scale(1, -1);				//Graphics的坐标系的变换
        
        int x,y;
        double d;
        x=0;y=b;;
        d=b*b-a*a*b+0.25*a*a;
		g.setColor(Color.blue);
		g.fillRect(x, y, 1, 1);
		while(b*b*x<a*a*y) {			//椭圆斜率绝对值小于1情况
			if(d<0) {d+=b*b*(2*x+3);x++;}
			else {d+=b*b*(2*x+3)+a*a*(-2*y+2);x++;y--;}
			g.setColor(Color.blue);
			g.fillRect(x,y,1,1);     
			g.fillRect(x,-y,1,1);
			g.fillRect(-x,y,1,1);
			g.fillRect(-x,-y,1,1); 
		}
		d=b*b*(x+0.5)*(x+0.5)+a*a*(y-1)*(y-1)-a*a*b*b;
		while(y>0){
				if(d>0) {d+=a*a*(-2*y+3);y--;}
				else {d+=b*b*(2*x+2)+a*a*(-2*y+3);x++;y--;}
				g.setColor(Color.blue);
				g.fillRect(x,y,1,1);     
				g.fillRect(x,-y,1,1);
				g.fillRect(-x,y,1,1);
				g.fillRect(-x,-y,1,1);
		}
		
    }
    public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
    	System.out.println("请输入长轴(范围0——200)a:");
    	a=scanner.nextInt();
    	System.out.println("请输入短轴(范围0——a)b:");
    	b=scanner.nextInt();
        JFrame frame = new JFrame("test");        
        frame.getContentPane().add(new Test());        
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        
        frame.setSize(400, 400);        
        frame.setVisible(true);   
    }
}

scale
public abstract void scale(double sx,double sy)

使用缩放变换连接当前的Graphics2D Transform后续渲染根据相对于先前缩放比例的指定缩放因子进行调整大小。 这等同于调用transform(S) ,其中S是一个AffineTransform由以下矩阵表示:

          [   sx   0    0   ]
          [   0    sy   0   ]
          [   0    0    1   ] 

参数

sx - 后续渲染操作中的X坐标相对于以前的渲染操作相乘的量。

sy - 后续渲染操作中的Y坐标相对于以前的渲染操作相乘的量。

  • translate

    public abstract void translate(int x, int y)

    Graphics2D上下文的原点转换为当前Graphics2D中的点( x , y )。 修改Graphics2D上下文,使其新起点对应于Graphics2D上下文的前坐标系中的点( x , y )。 在这种图形上下文中的后续渲染操作中使用的所有坐标都是相对于这个新的起点。

    Specified by:

    translate在 Graphics

    参数

    x - 指定的x坐标

    y - 指定的y坐标

  • translate

    public abstract void translate(double tx, double ty)
    将当前的Graphics2D Transform与平移变换相连。 随后的渲染相对于前一位置转换指定的距离。 这等同于调用变换(T),其中T是一个AffineTransform由以下矩阵表示:
              [   1    0    tx  ]
              [   0    1    ty  ]
              [   0    0    1   ] 

    参数

    tx - 沿x轴平移的距离

    ty - 沿y轴平移的距离

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值