计算机图形学圆的生成算法的实现.docx

上传人:b****4 文档编号:5985245 上传时间:2023-05-09 格式:DOCX 页数:9 大小:268.17KB
下载 相关 举报
计算机图形学圆的生成算法的实现.docx_第1页
第1页 / 共9页
计算机图形学圆的生成算法的实现.docx_第2页
第2页 / 共9页
计算机图形学圆的生成算法的实现.docx_第3页
第3页 / 共9页
计算机图形学圆的生成算法的实现.docx_第4页
第4页 / 共9页
计算机图形学圆的生成算法的实现.docx_第5页
第5页 / 共9页
计算机图形学圆的生成算法的实现.docx_第6页
第6页 / 共9页
计算机图形学圆的生成算法的实现.docx_第7页
第7页 / 共9页
计算机图形学圆的生成算法的实现.docx_第8页
第8页 / 共9页
计算机图形学圆的生成算法的实现.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

计算机图形学圆的生成算法的实现.docx

《计算机图形学圆的生成算法的实现.docx》由会员分享,可在线阅读,更多相关《计算机图形学圆的生成算法的实现.docx(9页珍藏版)》请在冰点文库上搜索。

计算机图形学圆的生成算法的实现.docx

计算机图形学圆的生成算法的实现

计算机图形学圆的生成算法的实现

部门:

xxx

时间:

xxx

 

整理范文,仅供参考,可下载自行编辑

实验三圆的生成算法的实现

班级08信计2班学号20080502054姓名曲凯歌分数

一、实验目的和要求

1.理解圆生成的基本原理。

2.掌握几种常见的圆生成算法。

3.利用VisualC++实现圆生成的中点画圆算法。

二、实验内容

1.利用中点画圆算法、Bresenham画圆法在屏幕上生成一整圆。

2.利用中点算法画一椭圆。

三、实验步骤

1.圆生成的基本原理

<1)圆的特征

圆的定义为到给定中心位置

距离为

的点集。

圆心位于原点的圆有4条对称轴:

若已知圆弧上一点

,可以得到其关于4条对称轴的其他7个点,这种性质称为八对称性。

b5E2RGbCAP

2.实现各种圆的生成算法,包括中点生成算法、Bresenham生成算法等。

程序运行后的菜单界面如图所示。

p1EanqFDPw

圆生成图形的程序运行界面

首先创建工程名为“圆的生成算法的实现”的单文档应用程序框架,操作步骤如下:

<1)创建单文档应用程序框架。

启动VisualC++,选择“文件/新建”菜单命令,在弹出的新建对话框中单击“工程”标签;选择.MFCAppWizard(exe>,在“工程名称”编辑框中输入“圆的生成算法的实现”<也可以使用英文名称),选择所要存放的位置后,单击“确定”按钮,出现Stept1对话框;选择“单个文档”选项,单击“下一步”按钮,在接着的Stept2~Stept5中,均可以直接单击“下一步”按钮完成应用程序框架的构建。

也可以在Stept1步选择“单文档”

DXDiTa9E3d

<2)添加菜单项及消息处理函数

在工作区中的ResourceView标签中,单击Menu项左边的“+”,然后双击其子项IDR_MAINFRAME,弹出编辑主菜单项,根据表1中定义的菜单项资源来编辑菜单,利用MFCClassWizard为应用程序添加与菜单项相关的消息处理函数。

RTCrpUDGiT

菜单标题

菜单项标题

菜单项ID

消息

消息处理函数

圆的生成

中点画圆

ID_MIDPOINTCIRCLE

COMMAND

OnMidpointcircle

Bresenham画圆

ID_BRESENHAMCIRCLE

COMMAND

OnBresenhamcircle

椭圆的生成

中点画椭圆

ID_MIDPOINTELLISPE

COMMAND

OnMidpointellispe

表1生成圆和椭圆的菜单项资源及消息处理函数

<3)添加程序代码

在CMyView.cpp文件中相应的位置添加各算法的程序代码,在VisualC++的MFC中绘制图形,一般可以调用一个“CDC”类,从CDC开始,添加代码。

5PCzVD7HxA

中点算法画圆。

利用中点画圆算法画出圆心在

、半径为R的圆,其VC程序设计代码如下:

voidCMyView:

:

OnMidpointcircle(>

{

CDC*pDC=GetDC(>。

intx0=150,y0=120,r=100,color=RGB(0,0,255>,x,y,d。

x=0。

y=r。

d=1-r。

pDC->SetPixel(x,y,color>。

while(x<=y>

{

if(d<0>d+=2*x+3。

else{d+=2*(x-y>+5。

y--。

}

x++。

pDC->SetPixel(x+x0,y+y0,color>。

pDC->SetPixel(-x+x0,y+y0,color>。

pDC->SetPixel(-x+x0,-y+y0,color>。

pDC->SetPixel(x+x0,-y+y0,color>。

pDC->SetPixel(y+x0,x+y0,color>。

pDC->SetPixel(-y+x0,x+y0,color>。

pDC->SetPixel(-y+x0,-x+y0,color>。

pDC->SetPixel(y+x0,-x+y0,color>。

}

ReleaseDC(pDC>。

}

Bresenham算法画圆。

利用Bresenham画圆算法画出圆心在

、半径为R的圆,其VC程序设计代码如下:

jLBHrnAILg

voidCMyView:

:

OnBresenhamcircle(>

{

CDC*pDC=GetDC(>。

intx0=100,y0=100,x,y,r=80,c=0。

floate,d。

e=3-2*r。

x=0。

y=r。

while(x<=y>

{

if(e<0>{e=e+4*x+6。

x++。

}

else{e=e+4*(x-y>+10。

x++。

y--。

}

pDC->SetPixel(x+x0,y+y0,c>。

pDC->SetPixel(-x+x0,y+y0,c>。

pDC->SetPixel(-x+x0,-y+y0,c>。

pDC->SetPixel(x+x0,-y+y0,c>。

pDC->SetPixel(y+x0,x+y0,c>。

pDC->SetPixel(-y+x0,x+y0,c>。

pDC->SetPixel(-y+x0,-x+y0,c>。

pDC->SetPixel(y+x0,-x+y0,c>。

}

ReleaseDC(pDC>。

}

中点算法画椭圆。

设中心在

,长半轴为

,短半轴为

其VC程序设计代码如下:

voidCMyView:

:

OnMidpointellispe(>

{

CDC*pDC=GetDC(>。

intx0=200,y0=100,a=120,b=60,x,y,color=100。

floatd1,d2。

x=0。

y=b。

d1=b*b+a*a*(-b+0.25>。

pDC->SetPixel(x+x0,y+y0,color>。

pDC->SetPixel(-x+x0,-y+y0,color>。

pDC->SetPixel(-x+x0,y+y0,color>。

pDC->SetPixel(x+x0,-y+y0,color>。

while(b*b*(x+1>>

{

if(d1<=0>{d1+=b*b*(2*x+3>。

x++。

}

else{d1+=b*b*(2*x+3>+a*a*(-2*y+2>。

x++。

y--。

}

pDC->SetPixel(x+x0,y+y0,color>。

pDC->SetPixel(-x+x0,-y+y0,color>。

pDC->SetPixel(-x+x0,y+y0,color>。

pDC->SetPixel(x+x0,-y+y0,color>。

}

d2=b*b*(x+0.5>*(x+0.5>+a*a*(y-1>*(y-1>-a*a*b*b。

while(y>0>

{

if(d2<=0>{d2+=b*b*(2*x+2>+a*a*(-2*y+3>。

x++。

y--。

}

else{d2+=a*a*(-2*y+3>。

y--。

}

pDC->SetPixel(x+x0,y+y0,color>。

pDC->SetPixel(-x+x0,-y+y0,color>。

pDC->SetPixel(-x+x0,y+y0,color>。

pDC->SetPixel(x+x0,-y+y0,color>。

}

ReleaseDC(pDC>。

}

四、实验结果分析

调试是程序成功后,运行结果如下:

中点算法生成的圆<蓝色圆弧)如图3-2,Bresenham算法生成的圆<黑色圆弧)如图3-3,中点算法生成的椭圆如图3-4。

xHAQX74J0X

图3-2中点法画圆效果图

图3-3Bresenham算法画圆效果图

图3-4中点法画椭圆效果图

其中中点画圆法实现原理:

构造圆函数

,并构造判别式:

,则应取

为下一像素,而且再下一像素的判别式为:

,则应取

为下一像素,而且下一像素的判别式为:

这里讨论的是按顺时针方向生成第二个八分圆,则第一个像素是

,判别式

的初始值

而Bresenham画圆法与中点画圆算法类似,考虑圆心在原点,半径为

的8分圆,取

为起点,按顺时针方向生成圆。

在这种情况下,从

开始,每步增加1,

直至

结束。

相应的

有两种选择:

选择的原则是考察理想的

值是否靠近

LDAYtRyKfE

通过本次“圆的生成”实验,在李老师的悉心指导下,我深刻的理解了圆生成的基本原理,对几种常用的圆生成算法有了更进一步的认识,了解了VisualC++等编程环境中常用控件命令与绘图函数,提高了自己独立动手操作的能力,同时大大激发了我对计算机图形学进一步学习的强大兴趣。

Zzz6ZB2Ltk

申明:

所有资料为本人收集整理,仅限个人学习使用,勿做商业用途。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2