计算机图形学画圆实验报告

洛阳理工学院实验报告用纸

计算机 系 B080504 班 姓名 刘 青 学号 成绩_______

实 验

名 称Bresenham画圆算法同组人日期实验题目:

使用中心画圆法,结合圆的四对称特性实现圆绘制的演示程序。

实验目的:

(1) 通过单击鼠标左键确定圆心,然后拖拽鼠标来确定圆的半径大小,在演示程序界面上显示圆心坐标和半径的长度;

(2) 使用边长大于5像素的矩形来表示光栅显示设备上的像素以实现算法的演示效果;

(3) 实现圆绘制过程的动画演示;

(4) 演示程序可以显示圆绘制过程中每一步的运算结果;

(5) 程序界面可以使用的语言及技术包括:C++(Qt,Win32 API)、VB/C#(GDI+)或Java(Swing),界面要求简单、整洁,可以充分实现要求的功能。

实验内容:

实验分析(C#语言GDI+实现)

(1)圆的特性

圆被定义为到给定中心位置(xc,yc)距离为r的点集。圆心位于原点的圆有四条对称轴x=0,y=0,x=y和x=-y。若已知圆弧上一点(x,y),可以得到其关于四条对称轴的其它7个点,这种性质称为圆的八对称性。因此,只要扫描转换八分之一圆弧,就可以求出整个圆弧的象素集。

显示圆弧上的八个对称点的算法:

void CirclePoints(int x,int y,int color)

{ drawpixel(x,y,color); drawpixel(y,x,color);

drawpixel(-x,y,color); drawpixel(y,-x,color);

drawpixel(x,-y,color); drawpixel(-y,x,color);

drawpixel(-x,-y,color); drawpixel(-y,-x,color);

}

(2)画理想圆流程图如图-1:

图-1:画理想圆流程图

(3)中点画圆法图-2 中点画圆法当前象素与下一象素的候选者

如果我们构造函数 F(x,y)=x2+y2-R2,则对于圆上的点有F(x,y)=0,对于圆外的点有F(x,y)>0,对于圆内的点F(x,y)<0 。与中点画线法一样,构造判别式:

d=F(M)=F(xp+1,yp-0.5)=(xp+1)2+(yp-0.5)2-R2

若 d<0,则应取P1为下一象素,而且再下一象素的判别式为:

d=F(xp+2,yp-0.5)=(xp+2)2+(yp-0.5)2-R2=d+2xp+3

若d≥0,则应取P2为下一象素,而且下一象素的判别式为

d=F(xp+2,yp-1.5)=(xp+2)2+(yp-1.5)2-R2=d+2(xp-yp)+5

我们这里讨论的第一个象素是(0,R),判别式d的初始值为:

d0=F(1,R-0.5)=1.25-R中点画圆算法:

MidPointCircle(int r int color)

{ int x,y;

float d;

x=0; y=r; d=1.25-r;

circlepoints (x,y,color);

while(x<=y)

{

if(d<0)

d+=2*x+3;

else

{

d+=2*(x-y)+5;

y--;

}

x++;

circlepoints (x,y,color);

}

}

为了进一步提高算法的效率,可以将上面的算法中的浮点数改写成整数,将乘法运算改成加法运算,即仅用整数实现中点画圆法。

Bresenham画线法与中点画线法相似,,它通过每列象素中确定与理想直线最近的象素来进行直线的扫描的转换的。通过各行,各列的象素中心构造一组虚拟网格线的交点,然后确定该列象素中与此交点最近的的象素。该算法的巧妙之处在于可以采用增量计算,使得对于每一列,只要检查一个误差项的符号,就可以确定该列的所求对象。假设x列的象素已确定,其行下标为y。那么下一个象素的列坐标必为x+1。而行坐标要么不变,要么递增1。是否递增1取决于如图所示的误差项d的值。因为直线的起始点在象素中心,所以误差项d的初始值为0。X下标每增加1,d的值相应递增直线的斜率值,即d=d+k(k=y/x为直线斜率)。一旦d>=1时,就把它减去,这样保证d始终在0、1之间。当d>0.5时,直线与x+1垂直网络线交点最接近于当前象素(x,y)的右上方象素(x+1,y+1);而当d<0.5时,更接近于象素(x+1,y),当d=0。5时,与上述二象素一样接近,约定取(x+1,y+1)。令e=d-0。5。则当e>=0时,下一象素的y下标增加1,而当e〈0时,下一象素的y下标不增。E的初始值为-0.5.

private Rectangle[] Bresenham_Circle(Point pcs, int rs)

{

计算机图形学教程动画实验报告,计算机图形学画圆实验报告.doc相关推荐

  1. 计算机图形学画圆公式推导,计算机图形学画圆方法(范文).doc

    计算机图形学画圆方法(范文) 第 PAGE \* Arabic 1 页第 PAGE \* Arabic 1 页 浙江大学城市学院实验报告 课程名称 计算机图形学 实验项目名称 画圆方法 实验成绩 指导 ...

  2. 计算机图形学画圆公式推导,计算机图形学画圆方法.doc

    计算机图形学画圆方法.doc (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 浙江大学城市学院实验报告课程名称 计算机图形学 实验工 ...

  3. 计算机图形学画圆vc代码,计算机图形学实验--完整版-带结果--vc++实现.doc

    计算机图形学实验--完整版-带结果--vc实现 计算机图形学实验报告 信息学院计算机专业 20081060183 周建明 综括: 利用计算机编程语言绘制图形,主要实现以下内容: (1).中点算法生成任 ...

  4. 计算机图形学教程答案,《计算机图形学教程》试卷A答案

    标 准 答 案 专 用 二.判断题(请给正确的达上"√",错误的打上"×",每小题2分,共20分) 三.简答题(每小题6分,共30分) 1.图像处理.模式识别与 ...

  5. 计算机图形学+简单算法实现,《计算机图形学》课程设计-简单几何体的消隐算法实现.doc...

    PAGE PAGE 18 PAGE 18 课程名称:<计算机图形学> 论文题目:简单几何体的消隐算法实现 教学部: 年 级: 班 级: 学 号: 姓 名: 简单几何体的消隐算法实现 摘 要 ...

  6. 计算机图形学画圆和直线代码,计算机图形学作业(中点法画直线和八分画圆法).doc...

    中点法画直线: void MidBresenhamLine(CDC *pDC,int x0,int y0,int x1,int y1,int color){ int dx,dy,d,up,down,x ...

  7. 计算机图形学画圆vc代码,VC++计算机图形学画直线、圆形、矩形示例源码

    // DrawSys.cpp : Defines the class behaviors for the application. // download by 链接已屏蔽 #include &quo ...

  8. 大学计算机word实践,大学计算机实践教程实验报告2010版

    遵义师范学院非计算机专业<大学计算机实践教程> 实 验 报 告 [实验目的] 1.了解操Windows 7的启动与退出 2.熟悉Windows 7操作环境 3.了解输入法的切换和软件盘的使 ...

  9. 动画都要用计算机图形学吗,计算机图形学在电影和动画中的应用.pdf

    计算机图形学在电影和动画中的应用.pdf SoftwareApplication ·软件应用 计算机图形学在电影和动画中的应用 文/费立伟 工学院毕业论文课题是关于三维交互式图形系 计算机软硬件和图形 ...

  10. c语言图形学彩球上浮,计算机图形学程设计 弹跳的彩球动画.doc

    计算机图形学程设计 弹跳的彩球动画 课程设计任务书 题目: 弹跳的彩球动画 课程设计任务书及成绩评定 课程设计的内容和具体要求 1.设计内容: 弹跳的球体:一个着色的三维球体,沿着一条给定的轨道(正弦 ...

最新文章

  1. 所有表单对象_Laravel 表单方法伪造与 CSRF 攻击防护
  2. 全球及中国光伏建筑一体化(BIPV)产业专项可行性与容量规模预测报告2022版
  3. 向数组添加元素 java_java如何向数组里添加元素
  4. 浙江省计算机二级excel函数,浙江省计算机二级excel练习5操作要求
  5. dw创建站点本地服务器,在Dreamweaver建立本地虚拟机站点
  6. 将Git子模块更新为最新的原始提交
  7. 2017百度之星资格赛:1003. 度度熊与邪恶大魔王
  8. Java 32位最新版 (Java SE 8)
  9. Error:(199) undefined reference to `__android_log_print'
  10. 抽象工厂模式类图及代码示例
  11. 常用电子元器件基本知识整理
  12. 【微信小程序 | 实战开发】开发环境、测试环境和生产环境
  13. 动态修改spine动画渲染层次
  14. Shifting More Attention to Video Salient Object Detection (CVPR 2019)
  15. ERROR 1366 (HY000): Incorrect string value: ‘\xE8\xB5\xB5 \xE9\x9B...‘ for column ‘s_name‘ at row 1
  16. PS进阶篇——如何PS软件给衣服换个颜色或图案风格(七)
  17. 漫威超级战争显示服务器断开,漫威超级战争进不去怎么办
  18. 数说故事「行业热点快报」连锁餐饮行业企业动态
  19. Java并发(四)BlockingQueue的使用
  20. ProGuard常见问题及解决套路

热门文章

  1. [Poi 2012] bzoj2794 Cloakroom [dp]
  2. 重量级ORM框架--持久化框架Hibernate【关系映射详解】
  3. Looking for the Devil in the Details
  4. 分散式云存储,元宇宙数据存储基建
  5. 暴雪战网国际版[国区登录战网国际版方法]
  6. ubuntu16.04 360随身WiFi2
  7. Mysql性能调优之max_allowed_packet
  8. 《富爸爸穷爸爸》书摘-为什么要教授财务知识
  9. 【VulnHub靶场】——HARRYPOTTER第一部: ARAGOG (1.0.2)
  10. SQL Server 2000个人版的安装