计算机图形学实验一.docx

上传人:b****1 文档编号:2857727 上传时间:2023-05-04 格式:DOCX 页数:16 大小:246.17KB
下载 相关 举报
计算机图形学实验一.docx_第1页
第1页 / 共16页
计算机图形学实验一.docx_第2页
第2页 / 共16页
计算机图形学实验一.docx_第3页
第3页 / 共16页
计算机图形学实验一.docx_第4页
第4页 / 共16页
计算机图形学实验一.docx_第5页
第5页 / 共16页
计算机图形学实验一.docx_第6页
第6页 / 共16页
计算机图形学实验一.docx_第7页
第7页 / 共16页
计算机图形学实验一.docx_第8页
第8页 / 共16页
计算机图形学实验一.docx_第9页
第9页 / 共16页
计算机图形学实验一.docx_第10页
第10页 / 共16页
计算机图形学实验一.docx_第11页
第11页 / 共16页
计算机图形学实验一.docx_第12页
第12页 / 共16页
计算机图形学实验一.docx_第13页
第13页 / 共16页
计算机图形学实验一.docx_第14页
第14页 / 共16页
计算机图形学实验一.docx_第15页
第15页 / 共16页
计算机图形学实验一.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

计算机图形学实验一.docx

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

计算机图形学实验一.docx

计算机图形学实验一

计算机图形学实验一

部门:

xxx

时间:

xxx

 

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

一、实验目的:

基本图形生成算法实验:

实现DDA、中点算法、Bresenham算法

二、实验内容

//DrawView.cpp文件

voidCDrawView:

:

OnDrawMidline(>

{

//TODO:

Addyourcommandhandlercodehere

CurrentDraw=DRAW_MIDLINE。

DrawType=2。

}

voidCDrawView:

:

OnDrawDdaline(>

{

//TODO:

Addyourcommandhandlercodehere

CurrentDraw=DRAW_DDALINE。

DrawType=1。

}

voidCDrawView:

:

OnDrawBshline(>

{

//TODO:

Addyourcommandhandlercodehere

CurrentDraw=DRAW_BSHLINE。

DrawType=3。

}

voidCDrawView:

:

OnDrawBshcircle(>

{

//TODO:

Addyourcommandhandlercodehere

CurrentDraw=DRAW_BSHCIRCLE。

DrawType=2。

}

voidCDrawView:

:

OnDrawMidcircle(>

{

//TODO:

Addyourcommandhandlercodehere

CurrentDraw=DRAW_MIDCIRCLE。

DrawType=1。

}

voidCDrawView:

:

OnDrawMidellipse(>

{

//TODO:

Addyourcommandhandlercodehere

CurrentDraw=DRAW_MIDELLIPSE。

DrawType=1。

}

//VC画线、VC画圆、VC画椭圆命令处理函数

voidCDrawView:

:

OnDrawVcline(>

{

//TODO:

Addyourcommandhandlercodehere

CurrentDraw=DRAW_VCLINE。

DrawType=0。

}

voidCDrawView:

:

OnDrawVccircle(>

{

//TODO:

Addyourcommandhandlercodehere

CurrentDraw=DRAW_VCCIRCLE。

DrawType=0。

}

voidCDrawView:

:

OnDrawVcellipse(>

{

//TODO:

Addyourcommandhandlercodehere

CurrentDraw=DRAW_VCELLIPSE。

DrawType=0。

}

//shape.h

//以下为第二章所用的类定义

classCLine:

publicCShape

{

protected:

intm_drawtype。

//

POINTm_pStart,m_pEnd。

CLine(>{}

DECLARE_SERIAL(CLine>

public:

CLine(POINTpStart,POINTpEnd,intWidth,intStyle,COLORREFColor,intm_drawtype>。

//intm_drawtypeb5E2RGbCAP

voidDrawing(CDC*pDC>。

voidVCLine(CDC*pDC>。

//

voidSerialize(CArchive&ar>。

}。

classCCircle:

publicCShape

{

protected:

intm_drawtype。

//

POINTm_pFP,m_pSP。

COLORREFm_FColor。

intm_FFlag,m_HFlag,m_HPattern。

CCircle(>{}

DECLARE_SERIAL(CCircle>

public:

CCircle(POINTpFP,POINTpSP,intWidth,intStyle,COLORREFColor,p1EanqFDPw

intm_FFlag,COLORREFFColor,intHFlag,intHPattern,intm_drawtype>。

//DXDiTa9E3d

voidDrawing(CDC*pDC>。

voidSerialize(CArchive&ar>。

voidVCCircle(CDC*pDC>。

//

}。

classCEllipse:

publicCShape

{

protected:

intm_drawtype。

//

POINTm_pFP,m_pSP。

COLORREFm_FColor。

intm_FFlag,m_HFlag,m_HPattern。

CEllipse(>{}

DECLARE_SERIAL(CEllipse>

public:

CEllipse(POINTpFP,POINTpSP,intWidth,intStyle,COLORREFColor,RTCrpUDGiT

intm_FFlag,COLORREFFColor,intHFlag,intHPattern,intm_drawtype>。

5PCzVD7HxA

voidDrawing(CDC*pDC>。

voidSerialize(CArchive&ar>。

voidVCEllipse(CDC*pDC>。

}。

//实现文件shape.cpp

//CShape

IMPLEMENT_SERIAL(CShape,CObject,1>

voidCShape:

:

Serialize(CArchive&ar>

{

if(ar.IsStoring(>>

ar<

else

ar>>m_pColor>>m_pWidth>>m_pStyle。

}

//CLine

IMPLEMENT_SERIAL(CLine,CShape,1>

CLine:

:

CLine(POINTpStart,POINTpEnd,intWidth,intStyle,COLORREFColor,intdrawtype>jLBHrnAILg

{

m_pStart=pStart。

m_pEnd=pEnd。

m_pWidth=Width。

m_pStyle=Style。

m_pColor=Color。

m_drawtype=drawtype。

}

voidCLine:

:

Drawing(CDC*pDC>

{

switch(m_drawtype>//

{

case0:

VCLine(pDC>。

break。

case1:

DDALine(m_pStart.x,m_pStart.y,m_pEnd.x,m_pEnd.y,m_pColor,m_pWidth,pDC>。

xHAQX74J0X

case2:

MidpointLine(m_pStart.x,m_pStart.y,m_pEnd.x,m_pEnd.y,m_pColor,m_pWidth,pDC>。

LDAYtRyKfE

break。

case3:

BresenhamLine(m_pStart.x,m_pStart.y,m_pEnd.x,m_pEnd.y,m_pColor,m_pWidth,pDC>Zzz6ZB2Ltk

break。

}

}

//下面是VC的画线函数

voidCLine:

:

VCLine(CDC*pDC>

{

CPenNewPen,*pOldPen。

NewPen.CreatePen(m_pStyle,m_pWidth,m_pColor>。

pOldPen=pDC->SelectObject(&NewPen>。

pDC->MoveTo(m_pStart>。

pDC->LineTo(m_pEnd>。

pDC->SelectObject(pOldPen>。

}

voidCLine:

:

Serialize(CArchive&ar>

{

if(ar.IsStoring(>>

ar<

<

//

else

ar>>m_pStart.x>>m_pStart.y

>>m_pEnd.x>>m_pEnd.y>>m_drawtype。

//

CShape:

:

Serialize(ar>。

}

//CCircle

IMPLEMENT_SERIAL(CCircle,CShape,1>

CCircle:

:

CCircle(POINTpFP,POINTpSP,intWidth,intStyle,COLORREFColor,dvzfvkwMI1

intFFlag,COLORREFFColor,intHFlag,intHPattern,intdrawtype>rqyn14ZNXI

{

m_pFP=pFP。

m_pSP=pSP。

m_pWidth=Width。

m_pStyle=Style。

m_pColor=Color。

m_FFlag=FFlag。

m_FColor=FColor。

m_HFlag=HFlag。

m_HPattern=HPattern。

m_drawtype=drawtype。

//

}

voidCCircle:

:

Drawing(CDC*pDC>

{

intxc,yc,r。

switch(m_drawtype>

{

case0:

VCCircle(pDC>。

break。

case1:

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>>。

EmxvxOtOco

MidCircle(xc,yc,r,m_pColor,m_pWidth,pDC>。

break。

case2:

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>>。

SixE2yXPq5

BresenhamCircle(xc,yc,r,m_pColor,m_pWidth,pDC>。

break。

}

}

//下面是VC画圆函数

voidCCircle:

:

VCCircle(CDC*pDC>

{

CPenNewPen,*pOldPen。

NewPen.CreatePen(m_pStyle,m_pWidth,m_pColor>。

pOldPen=pDC->SelectObject(&NewPen>。

pDC->SelectStockObject(NULL_BRUSH>。

CBrushNewBrush,*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_pFP.y,m_pSP.x,m_pSP.y>。

pDC->SelectObject(pOldPen>。

if(m_FFlag>pDC->SelectObject(pOldBrush>。

//

}

voidCCircle:

:

Serialize(CArchive&ar>

{

if(ar.IsStoring(>>

ar<

<

6ewMyirQFL

else

ar>>m_pFP.x>>m_pFP.y>>m_pSP.x>>m_pSP.y

>>m_FFlag>>m_FColor>>m_HFlag>>m_HPattern>>m_drawtype。

kavU42VRUs

CShape:

:

Serialize(ar>。

}

//CEllipse

IMPLEMENT_SERIAL(CEllipse,CShape,1>

CEllipse:

:

CEllipse(POINTpFP,POINTpSP,intWidth,intStyle,COLORREFColor,y6v3ALoS89

intFFlag,COLORREFFColor,intHFlag,intHPattern,intdrawtype>M2ub6vSTnP

{

m_pFP=pFP。

m_pSP=pSP。

m_pWidth=Width。

m_pStyle=Style。

m_pColor=Color。

m_FFlag=FFlag。

m_FColor=FColor。

m_HFlag=HFlag。

m_HPattern=HPattern。

m_drawtype=drawtype。

//

}

voidCEllipse:

:

Drawing(CDC*pDC>

{

intxc,yc,a,b。

switch(m_drawtype>

{

case0:

VCEllipse(pDC>。

break。

case1:

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>。

break。

}

}

//下面是VC的画椭圆函数

voidCEllipse:

:

VCEllipse(CDC*pDC>

{

//

CPenNewPen,*pOldPen。

NewPen.CreatePen(m_pStyle,m_pWidth,m_pColor>。

pOldPen=pDC->SelectObject(&NewPen>。

pDC->SelectStockObject(NULL_BRUSH>。

CBrushNewBrush,*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_pFP.y,m_pSP.x,m_pSP.y>。

pDC->SelectObject(pOldPen>。

if(m_FFlag>pDC->SelectObject(pOldBrush>。

}

voidCEllipse:

:

Serialize(CArchive&ar>

{

if(ar.IsStoring(>>

ar<

<

0YujCfmUCw

else

ar>>m_pFP.x>>m_pFP.y>>m_pSP.x>>m_pSP.y

>>m_FFlag>>m_FColor>>m_HFlag>>m_HPattern>>m_drawtype。

eUts8ZQVRd

CShape:

:

Serialize(ar>。

}

//BasicGraph.cpp

//下面是Bresenham的画线函数,请参照上面DDA和中点画线法,把它补充完整。

voidBresenhamLine(intx1,inty1,intx2,inty2,COLORREFcolor,intwidth,CDC*pDC>sQsAEJkW5T

{

intx,y,dx,dy,dk,i,s1,s2,temp,swap。

//请在此处补充代码

dx=abs(x2-x1>。

dy=abs(y2-y1>。

x=x1。

y=y1。

s1=Sign(x2-x1>。

s2=Sign(y2-y1>。

if(dy>dx>{temp=dx。

dx=dy。

dy=temp。

swap=1。

}

elseswap=0。

dk=2*dy-dx。

for(i=1。

i<=dx。

i++>

{

LineWidthProcess(x,y,abs(x2-x1>,abs(y2-y1>,color,width,pDC>。

GMsIasNXkA

if(swap==1>y=y+s2。

elsex=x+s1。

dk=dk+2*dy。

if(dk>=0>

{

if(swap==1>x=x+s1。

elsey=y+s2。

dk-=2*dx。

}

}

intSign(intx>

{

if(x<0>return-1。

elseif(x==0>return0。

elsereturn1。

}

//下面是Bresenham画圆函数,请参照上面中点画圆函数,把它补充完整。

voidBresenhamCircle(intxc,intyc,intr,COLORREFcolor,intwidth,CDC*pDC>TIrRGchYzg

{

intx,y,d。

x=0。

y=r。

//请在此处补充代码

d=3-2*r。

while(x

{

WholeCircle(xc,yc,x,y,color,width,pDC>。

if(d<0>

d=d+4*x+6。

else

{

d=d+4*(x-y>+10。

y--。

}

x++。

}

if(x==y>WholeCircle(xc,yc,x,y,color,width,pDC>。

}

//下面是中点画椭圆函数,请把它补充完整

voidMidEllipse(intxc,intyc,inta,intb,COLORREFcolor,intwidth,CDC*pDC>7EqZcWLZNX

{

intaa=a*a,bb=b*b。

inttwoaa=2*aa,twobb=2*bb。

intx=0,y=b。

intdx=0,dy=twoaa*y。

intd=(int>(bb+aa*(-b+0.25>+0.5>。

WholeEllipse(xc,yc,x,y,color,width,pDC>。

////请在此处补充代码

while(dx

{x++。

dx+=twobb。

if(d<0>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>。

lzq7IGf02E

while(y>0>

{y--。

dy-=twoaa。

if(d>0>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