ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:246.17KB ,
资源ID:2857727      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-2857727.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机图形学实验一.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

计算机图形学实验一.docx

1、计算机图形学实验一计算机图形学实验一部门: xxx 时间: xxx整理范文,仅供参考,可下载自行编辑一、实验目的:基本图形生成算法实验:实现DDA 、中点算法、Bresenham算法二、 实验内容/DrawView.cpp文件void CDrawView:OnDrawMidline( / TODO: Add your command handler code here CurrentDraw=DRAW_MIDLINE。 DrawType=2。void CDrawView:OnDrawDdaline( / TODO: Add your command handler code here Curr

2、entDraw=DRAW_DDALINE。 DrawType=1。void CDrawView:OnDrawBshline( / TODO: Add your command handler code here CurrentDraw=DRAW_BSHLINE。 DrawType=3。void CDrawView:OnDrawBshcircle( / TODO: Add your command handler code here CurrentDraw=DRAW_BSHCIRCLE。 DrawType=2。void CDrawView:OnDrawMidcircle( / TODO: Add

3、 your command handler code here CurrentDraw=DRAW_MIDCIRCLE。 DrawType=1。void CDrawView:OnDrawMidellipse( / TODO: Add your command handler code here CurrentDraw=DRAW_MIDELLIPSE。 DrawType=1。/VC画线、VC画圆、VC画椭圆命令处理函数void CDrawView:OnDrawVcline( / TODO: Add your command handler code here CurrentDraw=DRAW_VC

4、LINE。 DrawType=0。void CDrawView:OnDrawVccircle( / TODO: Add your command handler code here CurrentDraw=DRAW_VCCIRCLE。 DrawType=0。void CDrawView:OnDrawVcellipse( / TODO: Add your command handler code here CurrentDraw=DRAW_VCELLIPSE。 DrawType=0。/shape.h/以下为第二章所用的类定义class CLine:public CShapeprotected:

5、int m_drawtype。/ POINT m_pStart,m_pEnd。 CLine( DECLARE_SERIAL(CLinepublic: CLine(POINT pStart,POINT pEnd,int Width,int Style,COLORREF Color,int m_drawtype。/int m_drawtypeb5E2RGbCAP void Drawing(CDC *pDC。 void VCLine(CDC *pDC。/ void Serialize(CArchive &ar。class CCircle:public CShapeprotected: int m_d

6、rawtype。/ POINT m_pFP,m_pSP。 COLORREF m_FColor。 int m_FFlag,m_HFlag,m_HPattern。 CCircle( DECLARE_SERIAL(CCirclepublic: CCircle(POINT pFP,POINT pSP,int Width,int Style,COLORREF Color,p1EanqFDPw int m_FFlag,COLORREF FColor,int HFlag,int HPattern,int m_drawtype。/DXDiTa9E3d void Drawing(CDC *pDC。 void S

7、erialize(CArchive &ar。 void VCCircle(CDC *pDC。/。class CEllipse:public CShapeprotected:int m_drawtype。/ POINT m_pFP,m_pSP。 COLORREF m_FColor。 int m_FFlag,m_HFlag,m_HPattern。CEllipse( DECLARE_SERIAL(CEllipsepublic: CEllipse(POINT pFP,POINT pSP,int Width,int Style,COLORREF Color,RTCrpUDGiT int m_FFlag,

8、COLORREF FColor,int HFlag,int HPattern,int m_drawtype。5PCzVD7HxA void Drawing(CDC *pDC。 void Serialize(CArchive &ar。 void VCEllipse(CDC *pDC。/实现文件shape.cpp/CShapeIMPLEMENT_SERIAL(CShape,CObject,1void CShape:Serialize(CArchive &ar if(ar.IsStoring(arm_pColorm_pWidthm_pColorm_pWidthm_pStyle。/CLineIMPLE

9、MENT_SERIAL(CLine,CShape,1CLine:CLine(POINT pStart,POINT pEnd,int Width,int Style,COLORREF Color,int drawtypejLBHrnAILg m_pStart=pStart。 m_pEnd=pEnd。 m_pWidth=Width。 m_pStyle=Style。 m_pColor=Color。 m_drawtype=drawtype。void CLine:Drawing(CDC *pDC switch(m_drawtype/ case 0: VCLine(pDC。 break。 case 1:

10、DDALine(m_pStart.x,m_pStart.y,m_pEnd.x,m_pEnd.y,m_pColor,m_pWidth,pDC。 xHAQX74J0X case 2: MidpointLine(m_pStart.x,m_pStart.y,m_pEnd.x,m_pEnd.y,m_pColor,m_pWidth,pDC。LDAYtRyKfE break。 case 3: BresenhamLine(m_pStart.x,m_pStart.y,m_pEnd.x,m_pEnd.y,m_pColor,m_pWidth,pDCZzz6ZB2Ltk break。 /下面是VC的画线函数void

11、CLine:VCLine(CDC *pDC CPen NewPen,*pOldPen。 NewPen.CreatePen(m_pStyle,m_pWidth,m_pColor。 pOldPen=pDC-SelectObject(&NewPen。 pDC-MoveTo(m_pStart。 pDC-LineTo(m_pEnd。 pDC-SelectObject(pOldPen。void CLine:Serialize(CArchive &ar if(ar.IsStoring(arm_pStart.xm_pStart.ym_pEnd.xm_pEnd.ym_pStart.xm_pStart.ym_pE

12、nd.xm_pEnd.ym_drawtype。/ CShape:Serialize(ar。/CCircleIMPLEMENT_SERIAL(CCircle,CShape,1CCircle:CCircle(POINT pFP,POINT pSP,int Width,int Style,COLORREF Color,dvzfvkwMI1 int FFlag,COLORREF FColor,int HFlag,int HPattern,int drawtyperqyn14ZNXI m_pFP=pFP。 m_pSP=pSP。 m_pWidth=Width。 m_pStyle=Style。 m_pCol

13、or=Color。 m_FFlag=FFlag。 m_FColor=FColor。 m_HFlag=HFlag。 m_HPattern=HPattern。 m_drawtype=drawtype。/void CCircle:Drawing(CDC *pDC int xc,yc,r。 switch(m_drawtype case 0: VCCircle(pDC。 break。 case 1: xc=m_pFP.x。yc=m_pFP.y。 r=sqrt(m_pFP.x-m_pSP.x*(m_pFP.x-m_pSP.x+(m_pFP.y-m_pSP.y*(m_pFP.y-m_pSP.y。EmxvxO

14、tOco MidCircle(xc,yc,r,m_pColor,m_pWidth,pDC。 break。 case 2: xc=m_pFP.x。yc=m_pFP.y。 r=sqrt(m_pFP.x-m_pSP.x*(m_pFP.x-m_pSP.x+(m_pFP.y-m_pSP.y*(m_pFP.y-m_pSP.y。SixE2yXPq5BresenhamCircle(xc,yc,r,m_pColor,m_pWidth,pDC。 break。 /下面是VC画圆函数void CCircle:VCCircle(CDC *pDC CPen NewPen,*pOldPen。 NewPen.CreatePe

15、n(m_pStyle,m_pWidth,m_pColor。 pOldPen=pDC-SelectObject(&NewPen。 pDC-SelectStockObject(NULL_BRUSH。 CBrush NewBrush,*pOldBrush。 if(m_FFlag if(m_HFlag=0 NewBrush.CreateSolidBrush(m_FColor。 else NewBrush.CreateHatchBrush(m_HPattern,m_FColor。 pOldBrush=pDC-SelectObject(&NewBrush。 pDC-Ellipse(m_pFP.x,m_pF

16、P.y,m_pSP.x,m_pSP.y。 pDC-SelectObject(pOldPen。 if(m_FFlag pDC-SelectObject(pOldBrush。/void CCircle:Serialize(CArchive &ar if(ar.IsStoring( arm_pFP.xm_pFP.ym_pSP.xm_pSP.ym_FFlagm_FColorm_HFlagm_HPatternm_pFP.xm_pFP.ym_pSP.xm_pSP.y m_FFlagm_FColorm_HFlagm_HPatternm_drawtype。kavU42VRUs CShape:Serialize

17、(ar。/CEllipseIMPLEMENT_SERIAL(CEllipse,CShape,1CEllipse:CEllipse(POINT pFP,POINT pSP,int Width,int Style,COLORREF Color,y6v3ALoS89 int FFlag,COLORREF FColor,int HFlag,int HPattern,int drawtypeM2ub6vSTnP m_pFP=pFP。 m_pSP=pSP。 m_pWidth=Width。 m_pStyle=Style。 m_pColor=Color。 m_FFlag=FFlag。 m_FColor=FCo

18、lor。 m_HFlag=HFlag。 m_HPattern=HPattern。m_drawtype=drawtype。/void CEllipse:Drawing(CDC *pDC int xc,yc,a,b。 switch(m_drawtype case 0: VCEllipse(pDC。break。 case 1: xc=(m_pFP.x+m_pSP.x/2。 yc=(m_pFP.y+m_pSP.y/2。 a=abs(m_pFP.x-m_pSP.x/2。 b=abs(m_pFP.y-m_pSP.y/2。 MidEllipse(xc,yc,a,b,m_pColor,m_pWidth,pDC

19、。 break。 /下面是VC的画椭圆函数void CEllipse:VCEllipse(CDC *pDC/ CPen NewPen,*pOldPen。 NewPen.CreatePen(m_pStyle,m_pWidth,m_pColor。 pOldPen=pDC-SelectObject(&NewPen。 pDC-SelectStockObject(NULL_BRUSH。 CBrush NewBrush,*pOldBrush。 if(m_FFlag if(m_HFlag=0 NewBrush.CreateSolidBrush(m_FColor。 else NewBrush.CreateHa

20、tchBrush(m_HPattern,m_FColor。 pOldBrush=pDC-SelectObject(&NewBrush。 pDC-Ellipse(m_pFP.x,m_pFP.y,m_pSP.x,m_pSP.y。 pDC-SelectObject(pOldPen。 if(m_FFlag pDC-SelectObject(pOldBrush。void CEllipse:Serialize(CArchive &ar if(ar.IsStoring( arm_pFP.xm_pFP.ym_pSP.xm_pSP.ym_FFlagm_FColorm_HFlagm_HPatternm_pFP.x

21、m_pFP.ym_pSP.xm_pSP.y m_FFlagm_FColorm_HFlagm_HPatternm_drawtype。eUts8ZQVRdCShape:Serialize(ar。/BasicGraph.cpp/下面是Bresenham的画线函数,请参照上面DDA和中点画线法,把它补充完整。void BresenhamLine(int x1,int y1,int x2,int y2,COLORREF color,int width,CDC *pDCsQsAEJkW5T int x,y,dx,dy,dk,i,s1,s2,temp,swap。 /请在此处补充代码 dx=abs(x2-x1

22、。dy=abs(y2-y1。 x=x1。y=y1。 s1=Sign(x2-x1。s2=Sign(y2-y1。 if(dydx temp=dx。dx=dy。dy=temp。swap=1。 else swap=0。dk=2*dy-dx。 for(i=1。i LineWidthProcess(x,y,abs(x2-x1,abs(y2-y1,color,width,pDC。GMsIasNXkAif(swap=1 y=y+s2。 else x=x+s1。 dk=dk+2*dy。 if(dk=0 if(swap=1 x=x+s1。 else y=y+s2。dk-=2*dx。 int Sign(int x

23、if(x return -1。 else if(x=0 return 0。 else return 1。/下面是Bresenham画圆函数,请参照上面中点画圆函数,把它补充完整。void BresenhamCircle(int xc,int yc,int r,COLORREF color,int width,CDC *pDCTIrRGchYzg int x,y,d。 x=0。 y=r。/请在此处补充代码d=3-2*r。while(x WholeCircle(xc,yc,x,y,color,width,pDC。 if(d d=d+4*x+6。 else d=d+4*(x-y+10。 y-。 x+

24、。 if(x=y WholeCircle(xc,yc,x,y,color,width,pDC。/下面是中点画椭圆函数,请把它补充完整void MidEllipse(int xc,int yc,int a,int b,COLORREF color,int width,CDC *pDC7EqZcWLZNX int aa=a*a, bb=b*b。 int twoaa=2*aa, twobb=2*bb。int x=0, y=b。 int dx=0, dy=twoaa*y。int d=(int(bb+aa*(-b+0.25+0.5。 WholeEllipse(xc,yc,x,y,color,width,

25、pDC。 /请在此处补充代码 while (dx x+。 dx+=twobb。 if (d d += bb + dx。 else y-。 dy -= twoaa。 d += bb + dx -dy。 WholeEllipse(xc,yc,x,y,color,width,pDC。 d =(int (bb * (x +0.5 * (x+0.5 + aa * (y -1 *(y-1-aa * bb +0.5。lzq7IGf02Ewhile (y 0 y-。 dy -= twoaa。 if (d0 d += aa -dy。 else x+。 dx +=twobb。 d += aa-dy+dx。 WholeEllipse(xc,yc,x,y,color,width,pDC。 三、 实验结果四、 实验总结在本次实验中,我通过对课堂上所学知识的应用,学到了很多实践中的知识。并且加深了我对课本知识的理解和认识,在实验过程中,更容易记忆和深入理解多种算法实现基本图形zvpgeqJ1hk申明:所有资料为本人收集整理,仅限个人学习使用,勿做商业用途。

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

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