南昌大学计算机图形学实验报告.docx

上传人:b****4 文档编号:4357018 上传时间:2023-05-07 格式:DOCX 页数:34 大小:371.67KB
下载 相关 举报
南昌大学计算机图形学实验报告.docx_第1页
第1页 / 共34页
南昌大学计算机图形学实验报告.docx_第2页
第2页 / 共34页
南昌大学计算机图形学实验报告.docx_第3页
第3页 / 共34页
南昌大学计算机图形学实验报告.docx_第4页
第4页 / 共34页
南昌大学计算机图形学实验报告.docx_第5页
第5页 / 共34页
南昌大学计算机图形学实验报告.docx_第6页
第6页 / 共34页
南昌大学计算机图形学实验报告.docx_第7页
第7页 / 共34页
南昌大学计算机图形学实验报告.docx_第8页
第8页 / 共34页
南昌大学计算机图形学实验报告.docx_第9页
第9页 / 共34页
南昌大学计算机图形学实验报告.docx_第10页
第10页 / 共34页
南昌大学计算机图形学实验报告.docx_第11页
第11页 / 共34页
南昌大学计算机图形学实验报告.docx_第12页
第12页 / 共34页
南昌大学计算机图形学实验报告.docx_第13页
第13页 / 共34页
南昌大学计算机图形学实验报告.docx_第14页
第14页 / 共34页
南昌大学计算机图形学实验报告.docx_第15页
第15页 / 共34页
南昌大学计算机图形学实验报告.docx_第16页
第16页 / 共34页
南昌大学计算机图形学实验报告.docx_第17页
第17页 / 共34页
南昌大学计算机图形学实验报告.docx_第18页
第18页 / 共34页
南昌大学计算机图形学实验报告.docx_第19页
第19页 / 共34页
南昌大学计算机图形学实验报告.docx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

南昌大学计算机图形学实验报告.docx

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

南昌大学计算机图形学实验报告.docx

南昌大学计算机图形学实验报告

实验报告

 

实验课程:

计算机图形学

学生姓名:

涂汉江

学号:

6100410181

专业班级:

数媒101班

 

2012年12月16号

目录

实验1绘制直线和圆……………………………………………………………….1

实验2种子填充算法……………………………………………………………….3

实验3线条的剪裁………………………………………………………………….6

实验4B样条曲线绘制……………………………………………………………..10

实验5deboor曲线的绘制…………………………………………………………..13

南昌大学实验报告

学生姓名:

涂汉江学号:

6100410181专业班级:

数字媒体101班

实验类型:

□验证□综合■设计□创新

实验日期:

2012-12-16

实验1绘制直线和圆

1.实验目的

掌握基本图形的绘制

2.实验内容

1.、绘制一条直线

2、.绘制一个圆

3.实验环境

1、个人计算机

2、Windows7操作系统

3、VS2010

4.实验步骤

主要的代码:

1、线的实现代码:

这里采用的是数值微分法的方法

voidC线与圆2View:

:

dda(intx0,inty0,intx1,inty1,intcolor,CDC*pDC)

{

floatdx,dy,k,y;

dx=x1-x0;

dy=y1-y0;

k=dy/dx;

y=y0;

for(intx=x0;x<=x1;x++)

{

pDC->SetPixelV(x,int(y+0.5),RGB(255,0,0));

y=y+k;

}

}

2、圆的实现代码

这里采用的是中点画圆算法

voidC线与圆2View:

:

midcircle(intr,intcolor,CDC*pDC)

{

intx=0;

inty=r;

floatd;

d=1.25-r;

pDC->SetPixelV(x+100,y+100,RGB(255,0,0));

while(x

{

if(d<0)

{

d+=2*x+3;

x++;

}

else

{

d+=2*(x-y)+5;

x++;

y--;

}

pDC->SetPixelV(x+100,y+100,RGB(255,0,0));

pDC->SetPixelV(y+100,x+100,RGB(255,0,0));

pDC->SetPixelV(-x+100,y+100,RGB(255,0,0));

pDC->SetPixelV(x+100,-y+100,RGB(255,0,0));

pDC->SetPixelV(-x+100,-y+100,RGB(255,0,0));

pDC->SetPixelV(-y+100,x+100,RGB(255,0,0));

pDC->SetPixelV(y+100,-x+100,RGB(255,0,0));

pDC->SetPixelV(-y+100,-x+100,RGB(255,0,0));

}

}

3、头文件包含的文件

#include"stdafx.h"

//SHARED_HANDLERS可以在实现预览、

缩略图和搜索筛选器句柄的

//ATL项目中进行定义,并允许与该项目共享文档代码。

#ifndefSHARED_HANDLERS

#include"线与圆.h"

#endif

#include"线与圆Doc.h"

#include"线与圆View.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#endif

4、调用部分

voidC线与圆View:

:

OnDraw(CDC*pDC)

{

C线与圆Doc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

if(!

pDoc)

return;

midcircle(50,RGB(255,0,0),pDC);

dda(200,200,300,300,RGB(255,0,0),pDC);

}

这里画的是原点为(100,100)半径为50的圆和一条以(200,200)和(300,300)为端点的线段。

5、实验结果如下截图:

5.实验思考和问题解决

本来只能做出1/4的圆的,通过改变中心坐标和坐标正负号,重复循环4次,最后得到一个整圆。

前面有做直线的经验,所以总体来说还是比较顺利的。

上个学期学习了数值分析课程,也用过类似的描点函数,同样是设计函数,实现循环描点。

 

 

南昌大学实验报告

学生姓名:

涂汉江学号:

6100410181专业班级:

数字媒体101班

实验类型:

□验证□综合■设计□创新

实验日期:

2012-12-16

实验2种子填充算法

1.实验目的

掌握图形的填充算法

2.实验内容

1.绘制一个矩形

2.用种子填充算法为其上色

3.实验环境

1.个人计算机

2.Windows7操作系统

3.VS2010

4.实验步骤

主要代码部分:

//seedfillView.cpp:

implementationoftheCSeedfillViewclass

//

#include"stdafx.h"

#include"seedfill.h"

#include"seedfillDoc.h"

#include"seedfillView.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

//CSeedfillView

IMPLEMENT_DYNCREATE(CSeedfillView,CView)

BEGIN_MESSAGE_MAP(CSeedfillView,CView)

//{{AFX_MSG_MAP(CSeedfillView)

//NOTE-theClassWizardwilladdandremovemappingmacroshere.

//DONOTEDITwhatyouseeintheseblocksofgeneratedcode!

//}}AFX_MSG_MAP

//Standardprintingcommands

ON_COMMAND(ID_FILE_PRINT,CView:

:

OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_DIRECT,CView:

:

OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_PREVIEW,CView:

:

OnFilePrintPreview)

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

//CSeedfillViewconstruction/destruction

CSeedfillView:

:

CSeedfillView()

{

//TODO:

addconstructioncodehere

}

CSeedfillView:

:

~CSeedfillView()

{

}

BOOLCSeedfillView:

:

PreCreateWindow(CREATESTRUCT&cs)

{

//TODO:

ModifytheWindowclassorstylesherebymodifying

//theCREATESTRUCTcs

returnCView:

:

PreCreateWindow(cs);

}

/////////////////////////////////////////////////////////////////////////////

//CSeedfillViewdrawing

voidCSeedfillView:

:

OnDraw(CDC*pDC)

{

CSeedfillDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

//TODO:

adddrawcodefornativedatahere

DrawRectangle(pDC);

seed(210,210,(255,0,0),(225,255,225),pDC);

}

 

voidCSeedfillView:

:

seed(intx,inty,intfillcolor,intoldcolor,CDC*pDC)

{

intccolor;

ccolor=pDC->GetPixel(x,y);

if(ccolor!

=oldcolor&&ccolor!

=fillcolor)

{

pDC->SetPixelV(x,y,fillcolor);

seed(x+1,y,fillcolor,oldcolor,pDC);

seed(x-1,y,fillcolor,oldcolor,pDC);

seed(x,y+1,fillcolor,oldcolor,pDC);

seed(x,y-1,fillcolor,oldcolor,pDC);

}

 

}

voidCSeedfillView:

:

DrawRectangle(CDC*pDC)

{

for(inti=200;i<=300;i++)

{

pDC->SetPixelV(200,i,RGB(0,0,0));

pDC->SetPixelV(300,i,RGB(0,0,0));

pDC->SetPixelV(i,200,RGB(0,0,0));

pDC->SetPixelV(i,300,RGB(0,0,0));

}

}

/////////////////////////////////////////////////////////////////////////////

//CSeedfillViewprinting

BOOLCSeedfillView:

:

OnPreparePrinting(CPrintInfo*pInfo)

{

//defaultpreparation

returnDoPreparePrinting(pInfo);

}

voidCSeedfillView:

:

OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)

{

//TODO:

addextrainitializationbeforeprinting

}

voidCSeedfillView:

:

OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)

{

//TODO:

addcleanupafterprinting

}

/////////////////////////////////////////////////////////////////////////////

//CSeedfillViewdiagnostics

#ifdef_DEBUG

voidCSeedfillView:

:

AssertValid()const

{

CView:

:

AssertValid();

}

voidCSeedfillView:

:

Dump(CDumpContext&dc)const

{

CView:

:

Dump(dc);

}

CSeedfillDoc*CSeedfillView:

:

GetDocument()//non-debugversionisinline

{

ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSeedfillDoc)));

return(CSeedfillDoc*)m_pDocument;

}

#endif//_DEBUG

/////////////////////////////////////////////////////////////////////////////

//CSeedfillViewmessagehandlers

运行结果如下:

5.实验思考和问题解决

参考书上的伪代码并且与同学室友相互讨论实践才得到最后的结果,结果也差强人意,图显示的效果不好,很小。

 

 

南昌大学实验报告

学生姓名:

涂汉江学号:

6100410181专业班级:

数字媒体101班

实验类型:

□验证□综合■设计□创新

实验日期:

2012-12-16

实验3线条的剪裁

1.实验目的

掌握对线条的剪裁算法

2.实验内容

1.绘制一条直线

2.绘制一个矩形

3.计算矩形内的线段

4.绘制矩形内的线段

3.实验环境

1.个人计算机

2.Windows7操作系统

3.VS2010

4.实验步骤

//LineCutView.cpp:

implementationoftheCLineCutViewclass

//

#include"stdafx.h"

#include"LineCut.h"

#include"LineCutDoc.h"

#include"LineCutView.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

//CLineCutView

IMPLEMENT_DYNCREATE(CLineCutView,CView)

BEGIN_MESSAGE_MAP(CLineCutView,CView)

//{{AFX_MSG_MAP(CLineCutView)

//NOTE-theClassWizardwilladdandremovemappingmacroshere.

//DONOTEDITwhatyouseeintheseblocksofgeneratedcode!

//}}AFX_MSG_MAP

//Standardprintingcommands

ON_COMMAND(ID_FILE_PRINT,CView:

:

OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_DIRECT,CView:

:

OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_PREVIEW,CView:

:

OnFilePrintPreview)

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

//CLineCutViewconstruction/destruction

CLineCutView:

:

CLineCutView()

{

//TODO:

addconstructioncodehere

}

CLineCutView:

:

~CLineCutView()

{

}

BOOLCLineCutView:

:

PreCreateWindow(CREATESTRUCT&cs)

{

//TODO:

ModifytheWindowclassorstylesherebymodifying

//theCREATESTRUCTcs

returnCView:

:

PreCreateWindow(cs);

}

/////////////////////////////////////////////////////////////////////////////

//CLineCutViewdrawing

voidCLineCutView:

:

OnDraw(CDC*pDC)

{

CLineCutDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

//TODO:

adddrawcodefornativedatahere

DrawRectangle(pDC);

DrawLine(100,200,400,300,RGB(255,0,0),pDC);

C_S_Line_Clip(100,200,400,300,pDC);

}

voidCLineCutView:

:

DrawRectangle(CDC*pDC)

{

for(inti=200;i<=300;i++)

{

pDC->SetPixelV(200,i,RGB(0,0,0));

pDC->SetPixelV(300,i,RGB(0,0,0));

pDC->SetPixelV(i,200,RGB(0,0,0));

pDC->SetPixelV(i,300,RGB(0,0,0));

}

}

voidCLineCutView:

:

DrawLine(intx0,inty0,intx1,inty1,intcolor,CDC*pDC)

{

intx;

floatdx,dy,k,y;

dx=x1-x0;

dy=y1-y0;

k=dy/dx;

y=y0;

for(x=x0;x<=x1;x++)

{

pDC->SetPixelV(x,int(y+0.5),color);

y=y+k;

}

}

voidCLineCutView:

:

encode(floatx,floaty,int&code)

{

intc;

c=0;

if(x

c=c|LEFT;

elseif(x>XR)

c=c|RIGHT;

if(y

c=c|BOTTOM;

elseif(y>YT)

c=c|TOP;

code=c;

}

voidCLineCutView:

:

C_S_Line_Clip(floatx1,floaty1,floatx2,floaty2,CDC*pDC)

{

intx,y;

intcode1,code2,code;

encode(x1,y1,code1);

encode(x2,y2,code2);

while(code1!

=0||code2!

=0)

{

if((code1&code2)!

=0)

return;

code=code1;

if(code1==0)

code=code2;

if((LEFT&code)!

=0)

{

x=XL;

y=y1+(y2-y1)*(XL-x1)/(x2-x1);

}

elseif((RIGHT&code)!

=0)

{

x=XR;

y=y1+(y2-y1)*(XR-x1)/(x2-x1);

}

elseif((BOTTOM&code)!

=0)

{

y=YB;

x=x1+(x2-x1)*(YB-y1)/(y2-y1);

}

elseif((TOP&code)!

=0)

{

y=YT;

x=x1+(x2-x1)*(YT-y1)/(y2-y1);

}

if(code==code1)

{

x1=x;

y1=y;

encode(x,y,code1);

}

else

{

x2=x;

y2=y;

encode(x,y,code2);

}

}

//DISplayLine(x1,y1,x2,y2);

DrawLine(x1,y1,x2,y2,RGB(0,0,0),pDC);

DrawLine(x1,y1,x2,y2,RGB(0,0,255),pDC);

return;

}

/////////////////////////////////////////////////////////////////////////////

//CLineCutViewprinting

BOOLCLineCutView:

:

OnPreparePrinting(CPrintInfo*pInfo)

{

//defaultpreparation

returnDoPreparePrinting(pInfo);

}

voidCLineCutView:

:

OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)

{

//TODO:

addextrainitializationbeforeprinting

}

voidCLineCutView:

:

OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)

{

//TODO:

addcleanupafterprinting

}

/////////////////////////////////////////////////////////////////////////////

//CLineCutViewdiagnostics

#ifdef_DEBUG

voidCLineCutView:

:

AssertValid()const

{

CView:

:

AssertValid();

}

voidCLineCutView:

:

Dump(CDumpContext&dc)const

{

CView:

:

Dump(dc);

}

CLineCutDoc*CLineCutView:

:

GetDocument()//non-debugversionisinline

{

ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CLineCutDoc)));

return(CLineCutDoc*)m_pDocument;

}

#endif//_DEBUG

///////////////////////////////

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

当前位置:首页 > 解决方案 > 学习计划

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

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