计算机图形学CG 中点画圆法 画圆

2024-01-17 01:59
文章标签 计算机 画圆 图形学 cg

本文主要是介绍计算机图形学CG 中点画圆法 画圆,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

画圆

姓 名:    

学 号:        

班 级:      

日 期:    2012-4    

实验:     画圆

实验内容:

       我使用的是中点画圆法(改进(2)算法)

       核心算法:

//8个对称的点

   public static void drawEightPoint(int x,int y,Graphics g)

   {

      g.fillOval(offsetX+x,offsetY+y,pointSize,pointSize);

      g.fillOval(offsetX+x,offsetY-2*r+(offsetY-y),pointSize,pointSize);

      g.fillOval(offsetX-3*r+(offsetX-x),offsetY+y,pointSize,pointSize);

      g.fillOval(offsetX-3*r+(offsetX-x),offsetY-2*r+(offsetY-y),pointSize,pointSize);

     

      g.fillOval(offsetX+y,offsetY+x,pointSize,pointSize);

      g.fillOval(offsetX+y,offsetY-2*r+(offsetY-x),pointSize,pointSize);

      g.fillOval(offsetX-3*r+(offsetX-y),offsetY+x,pointSize,pointSize);

      g.fillOval(offsetX-3*r+(offsetX-y),offsetY-2*r+(offsetY-x),pointSize,pointSize);

   }

//中点画圆核心算法 

public staticvoiddrawCircle(Graphics g) {

      int x, y, d;

      x= 0;

      y= r;

      int deltax = 3;

      int deltay = 2 -r -r;

      d= 1 - r;

      drawEightPoint(x,y,g);

      while (x <= y) {

         if (d < 0) {

            d+= deltax;

            deltax+= 2;

         }else{

            d+= deltax + deltay;

            deltax+= 2;

            deltay+= 2;

            y--;

         }

         x++;

         drawEightPoint(x,y,g);

      }

实验结果:(截图)

  

程序源代码:

package cs0904.no200942094;

import java.awt.Graphics;

import javax.swing.JFrame;

import javax.swing.JPanel;

public classDrawCircle extendsJPanel {

   private static int frameWidth = 600;

   private static int frameHeight = 600;

   private static int offsetX = 300,offsetY = 200;

   // 起点和重点的坐标

   // 半径

   private static int r = 100;

   // 定义点的大小

   private static int pointSize = 5;

   // 20格算一个小格

   private static int turnBigger(int temp) {

      return temp * 20;

   }

   public static void main(String[] args) {

      JFrameframe = newJFrame("DrawLine");

      frame.getContentPane().add(new DrawCircle());

      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      frame.setSize(frameWidth,frameHeight);

      frame.setLocation(200,10);

      frame.setVisible(true);

   }

   //8个对称的点

   public static void drawEightPoint(int x,int y,Graphics g)

   {

      g.fillOval(offsetX+x,offsetY+y,pointSize,pointSize);

      g.fillOval(offsetX+x,offsetY-2*r+(offsetY-y),pointSize,pointSize);

      g.fillOval(offsetX-3*r+(offsetX-x),offsetY+y,pointSize,pointSize);

      g.fillOval(offsetX-3*r+(offsetX-x),offsetY-2*r+(offsetY-y),pointSize,pointSize);

     

      g.fillOval(offsetX+y,offsetY+x,pointSize,pointSize);

      g.fillOval(offsetX+y,offsetY-2*r+(offsetY-x),pointSize,pointSize);

      g.fillOval(offsetX-3*r+(offsetX-y),offsetY+x,pointSize,pointSize);

      g.fillOval(offsetX-3*r+(offsetX-y),offsetY-2*r+(offsetY-x),pointSize,pointSize);

   }

   public static void drawCircle(Graphics g){

      int x, y, d;

      x= 0;

      y= r;

      int deltax = 3;

      int deltay = 2 -r -r;

      d= 1 - r;

      drawEightPoint(x,y,g);

      while (x <= y) {

         if (d < 0) {

            d+= deltax;

            deltax+= 2;

         }else{

            d+= deltax + deltay;

            deltax+= 2;

            deltay+= 2;

            y--;

         }

         x++;

         drawEightPoint(x,y,g);

      }

      g.drawString("", x+20, y+20);

   }

 

   protected void paintComponent(Graphicsg) {

      super.paintComponent(g);

      for (int i = 0; i <frameHeight; i +=turnBigger(1)){

         g.drawLine(0,i, frameWidth,i);

      }

      for (int i = 0; i <frameWidth; i +=turnBigger(1)){

         g.drawLine(i,0, i, frameHeight);

      }

      drawCircle(g);

   }

}

 

这篇关于计算机图形学CG 中点画圆法 画圆的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/614595

相关文章

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

计算机视觉工程师所需的基本技能

一、编程技能 熟练掌握编程语言 Python:在计算机视觉领域广泛应用,有丰富的库如 OpenCV、TensorFlow、PyTorch 等,方便进行算法实现和模型开发。 C++:运行效率高,适用于对性能要求严格的计算机视觉应用。 数据结构与算法 掌握常见的数据结构(如数组、链表、栈、队列、树、图等)和算法(如排序、搜索、动态规划等),能够优化代码性能,提高算法效率。 二、数学基础

java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频)

这是什么系统? 资源获取方式在最下方 java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频) 停车管理信息系统是为了提升停车场的运营效率和管理水平而设计的综合性平台。系统涵盖用户信息管理、车位管理、收费管理、违规车辆处理等多个功能模块,旨在实现对停车场资源的高效配置和实时监控。此外,系统还提供了资讯管理和统计查询功能,帮助管理者及时发布信息并进行数据分析,为停车场的科学

《计算机视觉工程师养成计划》 ·数字图像处理·数字图像处理特征·概述~

1 定义         从哲学角度看:特征是从事物当中抽象出来用于区别其他类别事物的属性集合,图像特征则是从图像中抽取出来用于区别其他类别图像的属性集合。         从获取方式看:图像特征是通过对图像进行测量或借助算法计算得到的一组表达特性集合的向量。 2 认识         有些特征是视觉直观感受到的自然特征,例如亮度、边缘轮廓、纹理、色彩等。         有些特征需要通

【python计算机视觉编程——7.图像搜索】

python计算机视觉编程——7.图像搜索 7.图像搜索7.1 基于内容的图像检索(CBIR)从文本挖掘中获取灵感——矢量空间模型(BOW表示模型)7.2 视觉单词**思想****特征提取**: 创建词汇7.3 图像索引7.3.1 建立数据库7.3.2 添加图像 7.4 在数据库中搜索图像7.4.1 利用索引获取获选图像7.4.2 用一幅图像进行查询7.4.3 确定对比基准并绘制结果 7.

【python计算机视觉编程——8.图像内容分类】

python计算机视觉编程——8.图像内容分类 8.图像内容分类8.1 K邻近分类法(KNN)8.1.1 一个简单的二维示例8.1.2 用稠密SIFT作为图像特征8.1.3 图像分类:手势识别 8.2贝叶斯分类器用PCA降维 8.3 支持向量机8.3.2 再论手势识别 8.4 光学字符识别8.4.2 选取特征8.4.3 多类支持向量机8.4.4 提取单元格并识别字符8.4.5 图像校正

Python计算机视觉编程 第十章

目录 一、OpenCv基础知识 1.读取和写入图像 2.颜色空间 3.显示图像和结果 二、处理视频 1.输入视频 2.将视频读取到NumPy数组中 三、跟踪 1.光流 2.Lucas-Kanade算法 一、OpenCv基础知识 OpenCV 自带读取、写入图像函数以及矩阵操作和数学库。 1.读取和写入图像 import cv2# 读取图像im = c

2025届计算机毕业设计:如何构建Java SpringBoot+Vue个人健康档案管理系统?

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 | SpringBoot/SSM Python实战项目 | Django 微信小程序/安卓实战项目 大数据实战项目 ⚡⚡文末获取源码 文章目录

计算机毕业设计选题推荐-域名管理系统-域名商城-域名竞拍系统-Java/Python项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python项目 安卓项目 微信小程序项目 文章目录 一、前言二、开发环境三、系统界面展示四、代码参考五、论文参考六、系统视频结语

计算机基础知识复习9.6

点对点链路:两个相邻节点通过一个链路相连,没有第三者 应用:PPP协议,常用于广域网 广播式链路:所有主机共享通信介质 应用:早期的总线以太网,无线局域网,常用于局域网 典型拓扑结构:总线型 星型(逻辑总线型) 介质访问控制  静态划分信道 信道划分介质访问控制 频分多路复用FDM 时分多路复用TDM 波分多路复用WDM 码分多路复用CDM 动态分配信道 轮询访问介质访问控