计算机图形学课程设计实验报告.docx
- 文档编号:12121945
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:29
- 大小:293.26KB
计算机图形学课程设计实验报告.docx
《计算机图形学课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《计算机图形学课程设计实验报告.docx(29页珍藏版)》请在冰豆网上搜索。
计算机图形学课程设计实验报告
《计算机图形学》
实验报告
班级计算机科学与技术
姓名
学号
2014年6月2日
实验一基本图形生成算法
一、实验目的:
1、掌握中点Bresenham绘制直线的原理;
2、设计中点Bresenham算法;
3、掌握八分法中点Bresenham算法绘制圆的原理;
4、设计八分法绘制圆的中点Bresenham算法;
5、掌握绘制1/4椭圆弧的上半部分和下半部分的中点Bresenham算法原理;
6、掌握下半部分椭圆偏差判别式的初始值计算方法;
7、设计顺时针四分法绘制椭圆的中点Bresenham算法。
二、实验过程:
1、实验描述
实验1:
使用中点Bresenham算法绘制斜率为0<=k<=1的直线。
实验2:
使用中点Bresenham算法绘制圆心位于屏幕客户区中心的圆。
实验3:
使用中点Bresenham算法绘制圆心位于屏幕客户区中心的椭圆。
2、实验过程
1)用MFC(exe)建立一个单文档工程;
2)编写对话框,生成相应对象,设置相应变量;
3)在类CLineView中声明相应函数,并在相关的cpp文件中实现;
4)在OnDraw()函数里调用函数实现绘制直线、圆、椭圆;
5)运行程序,输入相应值,绘制出图形。
3、源代码
实验1:
直线中点Bresenham算法
1.//cline.cpp:
implementationfile
//clinedialog
cline:
:
cline(CWnd*pParent/*=NULL*/)
:
CDialog(cline:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(cline)
m_x0=0;
m_y0=0;
m_x1=0;
m_y1=0;
//}}AFX_DATA_INIT
}
voidcline:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(cline)
DDX_Text(pDX,IDC_x0,m_x0);
DDX_Text(pDX,IDC_y0,m_y0);
DDX_Text(pDX,IDC_x1,m_x1);
DDX_Text(pDX,IDC_y1,m_y1);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(cline,CDialog)
//{{AFX_MSG_MAP(cline)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
2、//LineView.h
classCLineView:
publicCView
{
public:
CLineDoc*GetDocument();
..........
voidMbline(double,double,double,double);//直线中点Bresenham函数
.......
}
3、//Line.cpp
//*******************直线中点Bresenham函数*********************/
voidCLineView:
:
Mbline(doublex0,doubley0,doublex1,doubley1)
{
CClientDCdc(this);
COLORREFrgb=RGB(0,0,255);//定义直线颜色为蓝色
doublex,y,d,k;
x=x0;y=y0;k=(y1-y0)/(x1-x0);d=0.5-k;
for(x=x0;x<=x1;x++)
{
dc.SetPixel((int)x,(int)y,rgb);
if(d<0)
{
y++;
d+=1-k;
}
else
d-=k;
}
}
4、//LineView.cpp
voidCLineView:
:
OnDraw(CDC*pDC)
{
CLineDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
//TODO:
adddrawcodefornativedatahere
clinea;
a.DoModal();//初始化
CLineView:
:
Mbline(a.m_x0,a.m_y0,a.m_x1,a.m_y1);
}
实验2:
圆中点Bresenham算法
1、//cricle.cpp
//Ccricledialog
Ccricle:
:
Ccricle(CWnd*pParent/*=NULL*/)
:
CDialog(Ccricle:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(Ccricle)
m_r=0;
//}}AFX_DATA_INIT
}
voidCcricle:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(Ccricle)
DDX_Text(pDX,r_EDIT,m_r);
//}}AFX_DATA_MAP
}
2、//CcircleView.h
classCCcircleView:
publicCView
{
.......
public:
CCcircleDoc*GetDocument();
voidCirclePoint(double,double);//八分法画圆函数
voidMbcircle(double);//圆中点Bresenham函数
........
}
3、//CcircleView.cpp
voidCCcircleView:
:
OnDraw(CDC*pDC)
{
CCcircleDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
//TODO:
adddrawcodefornativedatahere
Ccricler;
r.DoModal();
CCcircleView:
:
Mbcircle(r.m_r);//画圆
}
4、//CcircleView.cpp
//*******************八分法画圆*************************************/
voidCCcircleView:
:
CirclePoint(doublex,doubley)
{
CClientDCdc(this);
COLORREFrgb=RGB(0,0,255);
dc.SetPixel((int)(300+x),(int)(300+y),rgb);
dc.SetPixel((int)(300-x),(int)(300+y),rgb);
dc.SetPixel((int)(300+x),(int)(300-y),rgb);
dc.SetPixel((int)(300-x),(int)(300-y),rgb);
dc.SetPixel((int)(300+y),(int)(300+x),rgb);
dc.SetPixel((int)(300-y),(int)(300+x),rgb);
dc.SetPixel((int)(300+y),(int)(300-x),rgb);
dc.SetPixel((int)(300-y),(int)(300-x),rgb);
}
//**************************圆中点Bresenham函数*********************/
voidCCcircleView:
:
Mbcircle(doubler)
{
doublex,y,d;
COLORREFrgb=RGB(0,0,255);
d=1.25-r;
x=0;
y=r;
for(x=0;x { CirclePoint(x,y);//调用八分法画圆子函数 if(d<0) d+=2*x+3; else { d+=2*(x-y)+5; y--; } } } 实验3: 椭圆中点Bresenham算法 1、//ellipse1.cpp //Cellipsedialog Cellipse: : Cellipse(CWnd*pParent/*=NULL*/) : CDialog(Cellipse: : IDD,pParent) { //{{AFX_DATA_INIT(Cellipse) m_a=0; m_b=0; //}}AFX_DATA_INIT } voidCellipse: : DoDataExchange(CDataExchange*pDX) { CDialog: : DoDataExchange(pDX); //{{AFX_DATA_MAP(Cellipse) DDX_Text(pDX,IDC_EDIT1,m_a); DDX_Text(pDX,IDC_EDIT2,m_b); //}}AFX_DATA_MAP } 2、//EllipseView.h classCEllipseView: publicCView { ...................... public: CEllipseDoc*GetDocument(); voidEllipsePoint(double,double);//四分法画椭圆 voidMbellipse(doublea,doubleb);//椭圆中点Bresenham函数 .................. } 3、//Ellipse.cpp //*****************四分法画椭圆********************************/ voidCEllipseView: : EllipsePoint(doublex,doubley) { CClientDCdc(this); COLORREFrgb=RGB(0,0,255); dc.SetPixel((int)(300+x),(int)(300+y),rgb); dc.SetPixel((int)(300-x),(int)(300+y),rgb); dc.SetPixel((int)(300+x),(int)(300-y),rgb); dc.SetPixel((int)(300-x),(int)(300-y),rgb); } //************************椭圆中点Bresenham函数*********************/ voidCEllipseView: : Mbellipse(doublea,doubleb) { doublex,y,d1,d2; x=0; y=b; d1=b*b+a*a*(-b+0.25); EllipsePoint(x,y);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 课程设计 实验 报告