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

C++编写一个关于圆形的程序,要求定义一个圆形类Circle 1、编写一个关于圆形的C++程序。要求定义一个圆形类Circle,其中包含如下成员: 1)1个私有数据成员(半径)。 2)3个公有函数成员(设置半径、计算面积、计算周长)。 3)3个构造函数(不带参数的构造函数,带参数的构造函数和拷贝构造函数)。 //函数main使用圆形类Circle创建圆形对象,要求 1)定义一个圆对象c1,从键盘输入一个值x,并将其设定为c1的半径,计算并显示c1的面积和周长 2)再定义一个圆对象c2,并将半径初始化为2x,计算并显示c2的面积和周长 3)再定义一个圆对象c3,并用c1 阅读详情

画圆

姓 名:    

学 号:        

班 级:      

日 期:    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);

   }

}

 

计算机图形学 中点画圆法(c语言) 中点画圆 main() { int driver=DETECT,mode; int r,color; initgraph(&driver,&mode,""); setbkcolor(2); MidPoint_Circle(100,1); getch(); closegraph(); } 立即下载

相关推荐

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

本代码用于实现计算机图形学中使用中点画圆算法生成圆的简易方法!注:该代码在win-TC下运行!!

【计算机图形学DDA】C#中点画圆算法

一、中点画圆法 1、算法分析 利用圆的对称性,只须讨论1/8圆。 开局一张图???? P为当前点亮象素,那么,下一个点亮的象素可能是P1(Xi+1,Yi)或P2(Xi +1,Yi -1)。 构造函数: F(X,Y)=X2 + Y2 - R2 ;则 F(X,Y)= 0 (X,Y)在圆上; F(X,Y)< 0 (X,Y)在圆内; F(X,Y)> 0 (X,Y)在圆外。 设M为P1、P2间的中...

Null 3796

计算机图形学 像素法画直线画圆

本人计算机图形学实习成果,实现了DDA、中点、Bresenham,三种方法画直线、画圆。环境为VC++6.0

计算机图形学实验(三)——中点画圆算法实现及其源码

1.中点画圆算法简介:(以第一象限内靠近Y轴的1/8圆为例) 由于圆的对称性,只需要考虑的圆上的点。举例: 引入构造函数:。 分别表示点在圆外,圆上,圆内。 如图3-8所示:.M是P1和P2中点。 当F(M)&lt;0时,说明M在圆内,进而得知P1离圆弧更近;否则P2离圆弧更近(相等的情况,P1,P2都可以). 构造判别式:d=F(M).(详细内容可参考图片)              ...

junewgl 7312

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

上课做的作业,有报告,中点算法,Bresenham,vs2010,mfc的,希望对大家有帮助

中点画圆法程序

这是一个运用中点画圆法画圆的程序,使用了简单快捷的八分之一画圆方法,实现了绘制一个整圆,运用了OpenGL的图形框架,对于相关学习爱好者有一定的参考价值。

计算机图形学----------圆的绘制

绘制一个圆–原理就是根据中点Bresenham算法在第一象限内X∈[0,R/√2]绘制出1/8的圆弧,最后通过对称关系绘制出其他的7份圆弧。 OnDraw函数绘制坐标系。 void CTest2View::OnDraw(CDC* pDC) { CTest2Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here GetClientRe

qq_46016011的博客 1615

TC3xx芯片SPI多从机通信避坑指南:AUTOSAR框架下的DMA配置与片选切换

本文针对英飞凌TC3xx芯片在AUTOSAR框架下实现SPI多从机通信的实战难题,提供了详尽的避坑指南。重点解析了如何利用硬件支持的16路片选(SLSO)灵活切换,在AUTOSAR中正确配置不同时序的从设备,并深入探讨了异步模式下DMA的启用条件与关键配置细节,帮助开发者规避通信失败风险,提升系统可靠性。

nn3456的博客 153

C++ 画圆

C++画圆 使用C++技术在控制台输出一个圆形。 完整代码 # define PAI 3.1415926 # define B 0.809 # include "graphics.h" #include "math.h" int main() { int i,j,k,x0,y0,x,y,driver,mode; float a; driver=CGA;mode=CGAC0;...

weixin_45743799的博客 2977

基于车牌识别的停车收费系统的设计与实现(源码+开题)

本系统(程序源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景: 随着城市化进程的加速和汽车保有量的增加,停车难成为了一个普遍存在的问题。传统的停车收费方式存在着效率低下、管理混乱等问题。因此,开发一款基于车牌识别的停车收费系统具有重要的现实意义。研究意义: 基于车牌识别的停车收费系统可以有效地解决传统停车收费方式在效率和准确性方面的问题,提高停车服务的效率和质量。

迟限程序设计 1393

Sourcetree与Gitee的搭配使用

初次将gitee与sourcetree联合起来使用,还是遇到了不少问题,其中最让人烦恼的就是在我修改了一下用户名之后,便无法在Sourcetree直接推送到gitee,很是让人郁闷。本文处理Sourcetree与gitee搭配使用过程中的问题:Sourcetree身份验证失败,无法推送;Sourcetree推送时,无法显示要推送的分支;Sourcetree远端上面有感叹号。

年少时的棉花糖 4435

计算机图形学02:中点BH算法绘制直线

计算机图形学之中点BH算法绘制直线——附原理及详细代码

你的问题在于,读书太少而想得太多。 6580

Vitis HLS 学习指南与实践教程

Vitis HLS 学习指南与实践教程摘要:本文系统介绍了AMD Vitis HLS工具及其应用。HLS技术将C/C++代码自动转换为硬件描述语言,显著提升FPGA开发效率(5-10倍)。文章对比了HLS与传统RTL设计的优势,包括抽象级别高、开发周期短、代码重用性强等特点。详细讲解了Vitis HLS工具链的核心功能,包括支持的C/C++特性(如任意精度数据类型)、开发流程(项目创建-代码编写-仿真-综合)以及关键优化技术(流水线、循环展开、数组分割等编译指示)。通过具体代码示例展示了HLS设计方法,为F

weixin_44707118的博客 1401

计算机图形学03:改进的中点BH算法

计算机图形学之改进的中点BH算法——附原理及详细代码

你的问题在于,读书太少而想得太多。 6268

振镜控制卡硬件接口揭秘:XY2-100/SL2-100协议对比

本文对比分析了工业振镜控制领域两种主流数字通信协议XY2-100和SL2-100的硬件接口差异与应用场景。XY2-100作为开放式协议兼容性强,采用LVDS差分信号传输,适用于激光打标等中高精度场景;SL2-100为半封闭协议,采用RS485差分信号,专为高速响应场景设计。文章详细解析了两种协议的引脚定义、通信机制和性能参数,指出XY2-100适配多品牌振镜且调试简单,SL2-100则更适合Nutfield专用设备的高速高精度需求。最后提供了接口调试的实操建议和选型逻辑,强调应根据具体应用场景的精度、速度和

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 650

基于 Verilog 的经典数字电路设计(10)三态门

三态门(Triple-State Gate)亦称 “三态输出门”、“三态门输出电路”,是一种重要的总线接口电路,具有高电平、低电平和高阻抗三种输出状态的门电路,不过我们通常在设计中比较少见。   三态指其输出既可以是一般二值逻辑电路,即正常的高电平(逻辑 1)或低电平(逻辑 0),又可以保持特有的高阻抗状态,高阻态相当于隔断状态(电阻很大,相当于开路)。

新芯设计的博客 1万+

计算机图形学06:中点Bresenham画圆(并填充边界,例如:边界用红色,内部用绿色填充)

计算机图形学之中点Bresenham画圆(并填充边界,例如:边界用红色,内部用绿色填充)——附原理及详细代码

你的问题在于,读书太少而想得太多。 5618

实现基于 Python 和 xterm.js 的 Web 交互终端demo

前端 (HTML):使用 xterm.js 作为前端终端模拟器库。创建了一个 WebSocket 连接到 ws://localhost:8765,这与后端服务器的地址和端口匹配。监听 WebSocket 消息,并将数据写入终端。同时监听用户输入并发送到服务器。后端 (Python):使用 websockets 库来创建 WebSocket 服务器,监听端口 8765。使用 paramiko 库来创建 SSH 客户端并连接到指定的远程服务器。

u010674101的专栏 876

计算机图形学04:中点Bresenham算法画椭圆

计算机图形学之中点BH算法绘制椭圆——附原理及详细代码

你的问题在于,读书太少而想得太多。 9206

基于STM32的智能手环心率血氧体温监测系统(完整设计)

本文设计了一款基于STM32单片机的多功能智能手环系统,集成心率、血氧、体温实时监测功能,并支持运动数据管理与健康预警。系统采用MAX30102传感器实现心率血氧监测,DS18B20检测体温,ADXL345进行步数统计,通过OLED屏幕显示数据。研究通过低功耗硬件选型与模块化软件架构设计,实现了多参数同步采集、阈值预警及蓝牙数据传输功能。测试结果表明,系统在健康监测精度、续航能力及用户交互体验上均达到预期目标,为个人健康管理提供了实用解决方案。

3254968421的博客 703

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

计算机图形学07:有效边表法的多边形扫描转换

计算机图形学之有效边表法的多边形扫描转换——附原理及详细代码

你的问题在于,读书太少而想得太多。 7338

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

计算机图形学05:中点BH算法对任意斜率的直线扫描转换方法

计算机图形学之中点BH算法对任意斜率的直线扫描转换方法——附原理及详细代码

你的问题在于,读书太少而想得太多。 5113

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

计算机图形画圆弧的方法,计算机图形学_圆弧的生成

《计算机图形学_圆弧的生成》由会员分享,可在线阅读,更多相关《计算机图形学_圆弧的生成(19页珍藏版)》请在人人文库网上搜索。1、计算机图形学,ComputerGraphics(CG),廖谰臼值敌迈氛打否歇地肥澡搂件疆肮哎圣访撇吨募竖丙豪眼癸键抠遵援计算机图形学_圆弧的生成第一章绪论,2020年6月16日星期二,4.3.1圆弧的生成,1.数值微分法(DDA法),2.中点画圆算法,3.Bresenh...

weixin_42528902的博客 1092

计算机图形学08:中点BH算法绘制抛物线(100x = y^2)

模仿第一象限椭圆弧段扫描转换的BH算法,试着用中点Bresenham算法原理推导抛物线 100x = y^2 的绘制算法并编程实现其绘制——附原理及详细代码

你的问题在于,读书太少而想得太多。 3280

计算机图形学01:直线生成算法(DDA算法)

计算机图形学之直线生成算法(DDA算法)——附原理及详细代码

你的问题在于,读书太少而想得太多。 6094
上一篇: Javascript中定义类
下一篇: 7 款基于 JavaScript/AJAX 的文件上传插件
逆乾坤
博客等级 码龄16年 30粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值