计算机图形学圆弧生成算法具体程序实现.docVIP

计算机图形学圆弧生成算法具体程序实现.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

数学与软件科学学院实验报告

学期:2010至2011第一学期2010年10月5日

课程名称:计算机图形学专业:信息与计算科学2007级5班

实验编号:03实验工程:圆弧生成算法

指导教师:庞朝阳学号实验成绩:

一、实验目的及要求

1:圆弧上的八个对称点的算法描述;

2:了解圆弧的的根本绘制算法;

3:绘制椭圆;

二.根本思想

1:圆弧被定义为到给定中心位置〔x0,y0〕距离为r的点集,圆心为与原点的圆有四条对称轴:x=0,y=0,x=y,x=-y。圆弧上一点〔x,y〕,那么可以的到关于四条对称轴的其他7个点〔八对称性〕,因此只需要扫描八分之一的圆弧就可以求的整个圆弧的所有点。

三:首先来了解一下圆弧上的八个对称点的算法描述〔以中心在原点,半径为整数R的圆为例〕。

Voidcirclepoints(intx,inty,intcolor)

{

Setpixel(x,y,color);setpixel(y,x,color);

Setpixel(-x,y,color);setpixel(y,-x,color);

Setpixel(x,-y,color);setpixel(-y,x,color);

Setpixel(-x,-y,color);setpixel(-y,-x,color);

}

四:八分之一圆弧的扫描变换的实现。

算法根据圆的根本方,沿X轴从0到/2R,以单位步长计算

对应的y值来获得圆周上每点的位置:y=,

缺点:算法每一步均包含大量的复杂计算〔浮点乘〕且所绘制的像素间隔不一致

解决方法:使用极坐标r和来计算圆弧上的点

∈〔0,〕

该算法使用了三角函数和浮点运算,运算速度依然很慢。

五:中点画圆法〔以从〔0,R〕到〔R/,R/〕的1/8圆为例〕

根本原理

假定当前已确定了圆弧上的一个个像素点P(x,y),那么下一像素点只会是右方的P(x,y)或右下方的P〔x,y〕如图

构造函数F〔x,y〕=x+y-R,对于圆上的点有F〔x,y〕=0;对于圆外点有F〔x,y〕0,对于圆内点有F〔x,y〕0

设M为P、P的中点,即M〔x,y〕.那么当F〔M〕0时,中点M在圆内,即P离圆弧较近,那么取点P为F的下一像素。

F〔M〕0时,P离圆弧较近,取P为F的下一像素点

当F〔M〕=0时,约定取P。

根据以上原理,构造判别式:

d=F(M)=F〔x,y〕=(x)+(y)-R

假设d0,那么取P为下一像素点,且再下一像素点的判别式为

d=F(M)=F〔x,y〕=(x)+(y)-R

=d+2x+3

假设d0那么取p作为下一像素点,且再下一像素点的判别式为

d=F〔x,y〕=(x)+(y)-R

=d+2(x-y)+5

取第一个像素点为〔0.R〕那么判断式d的初始值为:

d=F=1.25-R

为防止浮点运算,令e=d-0.25

此时初始化运算d=1.25-R对应于e=1-R

判别式d0对应于e-0.25,又由于e的初始值和运算过程中的增值为整数故e始终为整数,那e-0.25可用e0代替。

2.代码实现及结果:

#includeiostream

#includestdafx.h

usingnamespacestd;

classYuan

{

public:

intx;

inty;

intr;

intcolor;

public:

voidMidpointCircle(intr,intcolor,CDC*pDC);

voidCirclePoints(intx,inty,intcolor,CDC*pDC);

voidChu(intx,inty);

};

voidYuan::Chu(intx,inty)

{

this-x=x;

this-y=y;

}

voidYuan::CirclePoints(intx,inty,intcolor,CDC*pDC)

{

pDC-SetPixel(x+200,y+200,color);

pDC-SetPixel(y+200,x+200,color);

pDC-SetPixel(-x+200,y+200,color);

pDC-SetPixel(y+200,-x+200,color);

pDC-SetPixel(x+200,-y+200,color);

pDC-SetPixel(-y+200,x+200,color);

pDC-SetPixel(

文档评论(0)

147****4268 + 关注
实名认证
文档贡献者

认真 负责 是我的态度

1亿VIP精品文档

相关文档