计算机图形课程设计报告.docx

上传人:b****7 文档编号:9250628 上传时间:2023-02-03 格式:DOCX 页数:13 大小:491.60KB
下载 相关 举报
计算机图形课程设计报告.docx_第1页
第1页 / 共13页
计算机图形课程设计报告.docx_第2页
第2页 / 共13页
计算机图形课程设计报告.docx_第3页
第3页 / 共13页
计算机图形课程设计报告.docx_第4页
第4页 / 共13页
计算机图形课程设计报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

计算机图形课程设计报告.docx

《计算机图形课程设计报告.docx》由会员分享,可在线阅读,更多相关《计算机图形课程设计报告.docx(13页珍藏版)》请在冰豆网上搜索。

计算机图形课程设计报告.docx

计算机图形课程设计报告

 

《计算机图形学》

课程设计

 

项目题目:

圆内动态颜色填充

专业:

计算机科学与技术

学号:

*********

***********************

*********************

 

2014年6月

一、项目概述

二、项目需求

三、项目设计

四、项目效果

五、算法改进

六、项目总结

一、

项目概述

填充算法用于内部定义区域,以改变整个区域的颜色属性,它把区域内的原像素点值改变成另一种像素点值。

算法中,读出像素点(x;y)像素点值。

此算法所采用的基本方法是首先确定(x;y)点的像素点是否在区域内尚未被访问过的那一部分之中,也就是说,如果这个像素点的值是原始值old-value,则需要把它改为填充的值new-value,然后按区域性质先后访问其相邻的像素点,当访问其中每一个近邻像素点时,都要进行递归调用。

填充算法,其基本思想是:

从图形的一个内点开始,由内向外用给定的颜色画点直到边界为止。

如果边界是以一种颜色指定的,则种子填充算法可逐个像素地处理直到遇到边界颜色为止。

从区域内任意一点出发,通过各方向到达区域内的任意像素。

二、项目需求

计算机图形学:

(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。

 

计算机图形学的主要研究内容就是研究如何在汁算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。

图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。

从处理技术上来看,图形主要分为两类,一类是基于线条信息表示的。

如工程图、等高线地图、曲面的线框图等,另一类是明暗图,也就是通常所说的真实感图形。

 

计算机图形学一个主要目的就是要利用计算机产生令人赏心悦目的真实感图形。

为此,必须建立图形所描述场景的几何表示,再用某种光照模型,计算在假想的光源、纹理、材质属性下的光照明效果。

同时,真实感图形计算的结果是以数字图像的方式提供的,计算机图形学也就和图像处理有着密切的关系。

 

计算机图形学的研究内容非常广泛,如图形硬件、图形标准、图形交互技术、光栅图形生成算法、曲线曲面造型、实体造型、真实感图形计算与显示算法、非真实感绘制,以及科学计算可视化、计算机动画、自然景物仿真、虚拟现实等。

三、项目设计

首先,创建TestMFC工程,在工程中的Testview找到OnDraw开始画图。

用函数Ellipse先作一个大圆,使圆大概在对话框的中央。

然后再创建一个画笔和画刷,画笔使圆边界加粗加色,画刷使边界内填充颜色。

接着用相同的方法再画四个同心圆,使每个圆的边界颜色不同,边界内填充的颜色也不同,这样就使的后画的圆覆盖了前面一个圆圆内的填充颜色,以达到不同颜色圆的效果。

其次,用for(inti=0;i<100;i++)语句设置圆渐变特效,用“Sleep(300);”设置圆变色的快慢。

最后,添加上自己想要添加上的文本的内容,比如“happyeveryday!

”、“(madebyWZ<112054141>)”。

用“pDC->SetTextColor(RGB(124,252,0));”课随意设置文本的颜色。

可以把“happyeveryday!

”放在for(inti=0;i<100;i++)语句之中,以便达到同时进行动态的效果。

四、项目效果

 

五、算法改进

//ProjectView.cpp:

implementationoftheCProjectViewclass

//

#include"stdafx.h"

#include"Project.h"

#include"ProjectDoc.h"

#include"ProjectView.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

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

//CProjectView

IMPLEMENT_DYNCREATE(CProjectView,CView)

BEGIN_MESSAGE_MAP(CProjectView,CView)

//{{AFX_MSG_MAP(CProjectView)

//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()

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

//CProjectViewconstruction/destruction

CProjectView:

:

CProjectView()

{

//TODO:

addconstructioncodehere

}

CProjectView:

:

~CProjectView()

{

}

BOOLCProjectView:

:

PreCreateWindow(CREATESTRUCT&cs)

{

//TODO:

ModifytheWindowclassorstylesherebymodifying

//theCREATESTRUCTcs

returnCView:

:

PreCreateWindow(cs);

}

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

//CProjectViewdrawing

voidCProjectView:

:

OnDraw(CDC*pDC)

{

CProjectDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

//TODO:

adddrawcodefornativedatahere

for(inti=0;i<100;i++)

{

Sleep(30);//设置变化时0间

CPennewpen;//创建画笔

newpen.CreatePen(PS_SOLID,25,RGB(250,0,0));

CBrushnewBrush1;//创建画刷

newBrush1.CreateSolidBrush(RGB(100,50,20));

pDC->SelectObject(&newBrush1);

pDC->SelectObject(&newpen);

pDC->Ellipse(450+i,45+i,850-i,445-i);//画圆

CPennewpen2;

newpen2.CreatePen(PS_SOLID,25,RGB(0,0,200));

CBrushnewBrush2;

newBrush2.CreateSolidBrush(RGB(100,200,00));

pDC->SelectObject(&newBrush2);

pDC->SelectObject(&newpen2);

pDC->Ellipse(500+i,95+i,800-i,395-i);

CPennewpen3;

newpen3.CreatePen(PS_SOLID,25,RGB(200,500,100));

CBrushnewBrush3;

newBrush3.CreateSolidBrush(RGB(150,100,50));

pDC->SelectObject(&newBrush3);

pDC->SelectObject(&newpen3);

pDC->Ellipse(550+i,145+i,750-i,345-i);

CPennewpen4;

newpen4.CreatePen(PS_SOLID,25,RGB(200,50,100));

CBrushnewBrush4;

newBrush4.CreateSolidBrush(RGB(0125,05,50));

pDC->SelectObject(&newBrush4);

pDC->SelectObject(&newpen4);

pDC->Ellipse(600+2*i,195+2*i,700-2*i,295-2*i);

CPennewpen5;

newpen5.CreatePen(PS_SOLID,25,RGB(200,500,100));

CBrushnewBrush5;

newBrush5.CreateSolidBrush(RGB(255,0,00));

pDC->SelectObject(&newBrush5);

pDC->SelectObject(&newpen5);

pDC->Ellipse(600+i,195+i,700-i,295-i);

CFontnewfont,*poldfont;

newfont.CreateFont(80,50,0,0,FW_THIN,true,false,false,

CHINESEBIG5_CHARSET,OUT_CHARACTER_PRECIS,

CLIP_CHARACTER_PRECIS,DEFAULT_QUALITY,

FF_MODERN,"宋体");//修改文本字体大小

poldfont=pDC->SelectObject(&newfont);

pDC->SetTextColor(RGB(255,200,0));//设置文本颜色

pDC->TextOut(400-i,480,"HaveFun!

");//文本坐标及内容

}

CBrushnewBrush;

newBrush.CreateSolidBrush(RGB(0,0,0));

pDC->SelectObject(&newBrush);

pDC->Ellipse(630,225,670,265);

for(intj=0;j<100;j++)

{

Sleep(10);

CFontnewfont,*poldfont;

newfont.CreateFont(30,30,0,0,FW_THIN,true,false,false,

CHINESEBIG5_CHARSET,OUT_CHARACTER_PRECIS,

CLIP_CHARACTER_PRECIS,DEFAULT_QUALITY,

FF_MODERN,"宋体");

poldfont=pDC->SelectObject(&newfont);//设置文本大小

pDC->SetTextColor(RGB(124,252,0));//设置文本颜色

pDC->TextOut(300,700-j,"(madebyWZ<112054141>)");

}

}

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

//CProjectViewprinting

BOOLCProjectView:

:

OnPreparePrinting(CPrintInfo*pInfo)

{

//defaultpreparation

returnDoPreparePrinting(pInfo);

}

voidCProjectView:

:

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

{

//TODO:

addextrainitializationbeforeprinting

}

voidCProjectView:

:

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

{

//TODO:

addcleanupafterprinting

}

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

//CProjectViewdiagnostics

#ifdef_DEBUG

voidCProjectView:

:

AssertValid()const

{

CView:

:

AssertValid();

}

voidCProjectView:

:

Dump(CDumpContext&dc)const

{

CView:

:

Dump(dc);

}

CProjectDoc*CProjectView:

:

GetDocument()//non-debugversionisinline

{

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

return(CProjectDoc*)m_pDocument;

}

#endif//_DEBUG

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

//CProjectViewmessagehandlers

六、项目总结

由于属于初学MFC且时间有限,所以对于设计难免也诸多的不足,很多东西都要马上学习查资料并进行初步调试即拿出来使用。

而制作出的前台功能单一结构简单是一大缺憾,没有时间进行精加工与进一步的调试补全源程序的不足之处使之更加完善。

 

不过通过这次的课程设计,使我们的自学能力与动手实践能力得到相当大的提高,编程并不是靠看书本就能学会的,而是要靠一步步的调试一条条指令的修改试运行中学习进步的,盲目的看书并不能提高自己水平。

从这次的课程设计我们知道了自己的不足,学习的知识不够充分,对于现有资源材料的利用学习率太。

 

附录:

[1]梁俊杰,冯玉才.LBD:

基于局部位码比较的高维空间KNN搜索算法[J].计算机科学.2007(06)

[2]沈永增,叶鸿敏,张敏捷.基于高维空间几何分析理论的图像增强实现[J].计算机仿真.2007(06)[3]李静,王文成,吴恩华.基于凸剖分的多边形窗口线裁剪算法[J].计算机辅助设计与图形学学报.2007(04)

[4]敖雁,徐辰武.贝叶斯回归分析方法及其在QTL作图中的应用[J].扬州大学学报.2005(02)[5]刘勇,徐从富,陈卫东,潘云鹤.带圆弧简单多边形的面积公式获取算法[J].计算机辅助设计与图形学学报.2005(04)

[6]董未名,玛依拉·巴榜,周登文,孙家广.平面扩展简单多边形的布尔运算[J].计算机辅助设计与图形学学报.2003(09)[7]汪树玉,刘国华,刘立军,张利.观测数据分析中几种方法的探讨

(一)回归—时间序列模型和贝叶斯预测模型[J].水电自动化与大坝监测.2003(02)

[8]朱雅音,王化文,万丰,于雷易.确定两个任意简单多边形交、并、差的算法[J].计算机研究与发展.2003(04)[9]陶卿,曹进德,孙德敏.基于支持向量机分类的回归方法[J].软件学报.2002(05)

[10]王守觉,王柏南.人工神经网络的多维空间几何分析及其理论[J].电子学报.2002(01)

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

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1