计算机图形学实验一中点算法绘制圆

java实现计算机图形学中点画圆算法

计算机图形学实验一

采用中点画圆算法原理绘制1/8圆弧,然后利用圆的高度对称性,基于java的Graphics类,调用getGraphics()方法,在GUI界面上绘图,由于java的坐标位于左上角,所以我们可以将圆心移动至面板中心再进行算法进程:

package com.draw;
import javax.swing.*;
import java.awt.*;
import java.util.Scanner;

public class middle extends JFrame {
    private Graphics ga;
    public middle(){
        ga = this.getGraphics();
        setBounds(0, 0, 1000, 1000);
        setVisible(true);
        setBackground(Color.WHITE);
        setLayout(null);
        setResizable(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        if (ga != null)
            paint(ga);
    }
    public void paint(Graphics g) {
        double r = 200;
        double x0, y0,t1,t2;
        x0 = 0;
        y0 = r;
        g.setColor(Color.GREEN);
        g.drawOval((int)x0,(int)y0,1,1);
        double d = 1-r;//构造判别式
        while(x0<y0){
            if(d<0){
                x0 = x0+1;
                g.drawOval((int)(x0+300),(int)y0+400,5,5);//绘制1/8圆弧A
                g.drawOval((int)(x0+300), (int) ((int)400-y0),5,5);//绘制A圆弧关于y=400的对称
                g.drawOval((int)(-x0+300),(int)y0+400,5,5);//绘制关于x=300对称的1/8圆弧B
                g.drawOval((int)(-x0+300),400-(int)y0,5,5);//绘制B关于y=400对称
                g.drawOval((int)y0+300,(int)x0+400,5,5); //交换x,y使得填满1/4圆C
                g.drawOval((int)y0+300,400-(int)x0,5,5); //绘制C关于y=400对称
                g.drawOval((int)(300-y0),(int)(x0+400),5,5);//被填满的部分C的对称E
                g.drawOval((int)(300-y0),400-(int)x0,5,5);//绘制E关于y=400对称
                d = d+2*x0+3;
            }else{
                x0 = x0+1;
                y0 = y0-1;
                d = d +2*(x0-y0)+5;
                g.drawOval((int)(x0+300),(int)y0+400,5,5);//绘制1/8圆弧
                g.drawOval((int)(x0+300), (int) ((int)400-y0),5,5);//绘制1/8圆弧关于y=400的对称
                g.drawOval((int)(-x0+300),(int)y0+400,5,5);//绘制关于x=300对称的1/8圆弧B
                g.drawOval((int)(-x0+300),400-(int)y0,5,5);//绘制B关于y=400对称
                g.drawOval((int)y0+300,(int)x0+400,5,5);//交换x,y使得填满1/4圆C
                g.drawOval((int)y0+300,400-(int)x0,5,5); //绘制C关于y=400对称
                g.drawOval((int)(300-y0),(int)(x0+400),5,5);//被填满的部分C的对称E
                g.drawOval((int)(300-y0),400-(int)x0,5,5);//绘制E关于y=400对称
            }
        }
    }
    public static void main(String[] args) {
        new middle();
    }
}


圆如图所示

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值