计算机图形学圆的生成算法的实现Word文档格式.docx

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

计算机图形学圆的生成算法的实现Word文档格式.docx

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

计算机图形学圆的生成算法的实现Word文档格式.docx

<

1)圆的特征

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

距离为

的点集。

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

若已知圆弧上一点

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

b5E2RGbCAP

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

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

p1EanqFDPw

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

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

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

启动VisualC++,选择“文件/新建”菜单命令,在弹出的新建对话框中单击“工程”标签;

选择.MFCAppWizard(exe>

,在“工程名称”编辑框中输入“圆的生成算法的实现”<

也可以使用英文名称),选择所要存放的位置后,单击“确定”按钮,出现Stept1对话框;

选择“单个文档”选项,单击“下一步”按钮,在接着的Stept2~Stept5中,均可以直接单击“下一步”按钮完成应用程序框架的构建。

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

Singledocument)后,直接单击“完成”按钮完成。

DXDiTa9E3d

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

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

RTCrpUDGiT

菜单标题

菜单项标题

菜单项ID

消息

消息处理函数

圆的生成

中点画圆

ID_MIDPOINTCIRCLE

COMMAND

OnMidpointcircle

Bresenham画圆

ID_BRESENHAMCIRCLE

OnBresenhamcircle

椭圆的生成

中点画椭圆

ID_MIDPOINTELLISPE

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>

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

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

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

SetPixel(y+x0,x+y0,color>

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

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

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

}

ReleaseDC(pDC>

Bresenham算法画圆。

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

jLBHrnAILg

OnBresenhamcircle(>

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

floate,d。

e=3-2*r。

if(e<

{e=e+4*x+6。

x++。

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

+10。

SetPixel(x+x0,y+y0,c>

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

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

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

SetPixel(y+x0,x+y0,c>

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

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

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

中点算法画椭圆。

设中心在

,长半轴为

,短半轴为

其VC程序设计代码如下:

OnMidpointellispe(>

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

floatd1,d2。

y=b。

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

while(b*b*(x+1>

a*a*(y-0.5>

>

if(d1<

=0>

{d1+=b*b*(2*x+3>

else{d1+=b*b*(2*x+3>

+a*a*(-2*y+2>

d2=b*b*(x+0.5>

*(x+0.5>

+a*a*(y-1>

*(y-1>

-a*a*b*b。

while(y>

if(d2<

{d2+=b*b*(2*x+2>

+a*a*(-2*y+3>

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

四、实验结果分析

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

中点算法生成的圆<

蓝色圆弧)如图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