计算机图形学实验一中点算法绘制圆_利用中点扫描算法,对单位圆进行绘制_机器王德发的博客-程序员秘密

技术标签: 算法  经验分享  笔记  java  计算机视觉  程序人生  

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


圆如图所示

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/HBBSSZB/article/details/117134066

智能推荐

SpringMVC 请求响应流程_weixin_30301183的博客-程序员秘密

SpringMVC的工作原理图:SpringMVC流程1、 用户发送请求至前端控制器DispatcherServlet。2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet...

★Kali信息收集~ 1.Google Hacking + Github Hacking_weixin_34228662的博客-程序员秘密

一、google hacking site site:cnblogs.com 毒逆天    intitle intitle:login    allintitle allintitle:index of     allinurl:forcedownload.php?file=    inurl in...

torch tensor用法_AI视觉网奇的博客-程序员秘密

1.x = torch.Tensor(5):zero()Tensor转int:int(x1.cpu().data)2.conf_mask = torch.ones(nB, nA, dim, dim)conf_mask[...]=0除法操作:float((torch.sum(preds == labels.data)).cpu().data)/2Tensor构造的...

ElasticSearch在linux上安装部署_linux查看es安装目录_小朋友呀呀的博客-程序员秘密

安装参考文档:ELK官网:https://www.elastic.co/ELK官网文档:https://www.elastic.co/guide/index.htmlELK中文手册:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.htmlELK中文社区:https://elasticsearch.cn/ELK-API :https://www.elastic.co/guide/en/elasticsearch/client/

Duplicate property mapping of xxx found in xx 解决办法_唱响星河的博客-程序员秘密

原因*.hbm.xml中有二个一样的&lt;property name="名字" /&gt;&lt;property name="名字" /&gt;MemberGuessCycle类中 映射字段重复 createdTime 父类中已有该属性解决方法改个名字即可...

随便推点

OracleFlashback技术总结[email protected]的博客-程序员秘密

原 Oracle Flashback 技术 总结https://blog.csdn.net/tianlesoftware/article/details/4677378版权声明: https://blog.csdn.net/tianlesoftware/article/details/4677378 写在前面: 2009年的时候结合网上的资料整理了下Flashback的...

错误集锦1_随雨_而来的博客-程序员秘密

刚才在修改应用上的三个UILabel,后两个UILabel是通过copy第一个UILabel的代码,然后修改实现的。悲剧的是修改名字的时候,有一行代码的名字没有修改,造成第一个UILabel的对齐方式被多次赋值。例如:UILabel * label1 = [UILabel alloc] initWithRect: CGRectMake(10,0, 60,30)]

jQuery升级踩坑大全_weixin_30781107的博客-程序员秘密

  背景  jQuery想必各个web工程师都再熟悉不过了,不过现如今很多网站还采用了很古老的jQuery版本。其实如果早期版本使用不当,可能会有DOMXSS漏洞,非常建议升级到jQuery 1.9.x或以上版本。前段时间我就主导了这件事情,把公司里我们组负责的项目jQuery版本从1.4.2升级到了jQuery 1.11.3。jQuery官方也为类似升级工作提供了jQuery Mig...

数据可视化 - 关系图_数据与数据之间的关系可视化_YYDataV数据可视化的博客-程序员秘密

import asynciofrom aiohttp import TCPConnector, ClientSessionimport pyecharts.options as optsfrom pyecharts.charts import Graph"""Gallery 使用 pyecharts 1.1.0参考地址: https://echarts.baidu.com/examples/editor.html?c=graph-npm目前无法实现的功能:1、暂无"""...

浅析如何学好C语言 ._xiaoya5271的博客-程序员秘密

今天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了所有的数字化信息,不论是一段程序,一封email,一部电影都是用一连串的1和0进行编码的;是他们发现了我们可以利用一个预先编写好的程序控制机器,并使之完成我们期望它完成的动作。建议大家在心里默念三遍他们的名字,以示仰慕。当然,如果让你们带着现在的知识回到他们的那个时代,那

Pytorch argmax_pytorch, argmax_rosefunR的博客-程序员秘密

1.argmaxtorch.argmax(input, dim, keepdim=False) → LongTensor返回指定维度的最大值的索引。2.示例b = torch.randn(4, 5)torch.argmax(b, dim=0)Output:# btensor([[-2.2276, 0.9573, -1.9554, 0.8877, 0.7543], ...

推荐文章

热门文章

相关标签