计算机图形学金刚石算法实验报告

来源:工作范文网 时间:2020-09-21 12:24:44

PAGE

PAGE 1

实验成绩:

《计算机图形学》实验报告

班级: 1420561

专业: 软件工程

学号: 142056127

姓名: 马哲

2016年12月

《计算机图形学》课程实验报告(一)

班级

1420561

实验日期

2016.10.24

姓名

马哲

学号

27

实验名称

金刚石图案算法

自定义二维坐标系

二维点类的定义方法

对话框的创建及调用方法

金刚石图案算法

一维堆内存的分配和释放

设计个性化的菜单项与工具栏

创建Test工程模板

设计菜单和工具栏按钮

(1.)设置菜单的ID

删除多余的菜单选项,只保留三个即可。

设置工具栏按钮

关联工具栏按钮与菜单项

设计应用程序图标

设计“关于”对话框

设计输入对话框

设计输入对话框界面

添加输入对话框类

为输入对话框的控件映射数据成员

设置编辑框控件Edit Box的初始值

m_n=30;

m_r=300.0;

设置编辑框控件Edit Box的初始状态为选中

代码为:

void CInputDlg::OnShowWindow(BOOL bShow, UINT nStatus)

{

CDialog::OnShowWindow(bShow, nStatus);

// TODO: Add your message handler code here

GetDlgItem(IDC_EDIT1)->SetFocus();

((CEdit*)GetDlgItem(IDC_EDIT1))->SetSel(0,-1);

}

设计二维点类

新建类,CP2,修改二维点类的初始定义

在P2.h添加duble类x、y,在P2.cpp添加x=0,y=0;

5.设计CTestView类

添加“绘图”子菜单命令消息映射函数

CTestView头文件设计

定义指针P,定义n,r,添加Diamond成员函数

CTestView的源程序设计

(源程序在附录)

修改“绘图”子菜单命令消息映射函数的定义

void CTestView::OnDrawpic()

{

// TODO: Add your command handler code here

CInputDlg dlg;

if(IDOK==dlg.DoModal())

{

n=dlg.m_n ;

r=dlg.m_r ;

}

else

return;

RedrawWindow();

P=new CP2[n];

Diamond();

delete [] P;

}

实验结果如下:

输入对话框界面

等分点个数为30时:

等分点个数为10时:

教材中仅介绍了0<=k<=1直线段的中点Bresenham扫描转换算法。CLine类的成员函数用于绘制任意斜率的直线段,MSDN显示直线坐标位置。

(核心源程序清单)

void CTextView::Diamond()

{

CDC*pDC=GetDC();

CRect rect;

GetClientRect(&rect);

pDC->SetMapMode(MM_ANISOTROPIC);

pDC->SetWindowExt(rect.Width(),rect.Height());

pDC->SetViewportExt(rect.Width(),-rect.Height());

pDC->SetWindowOrg(rect.Width()/2,rect.Height()/2);

rect.OffsetRect(-rect.Width()/2,-rect.Height()/2);

CPen NewPen,*pOldPen;

NewPen.CreatePen(PS_SOLID,1,RGB(0,0,255));

pOldPen=pDC->SelectObject(&NewPen);

double Alpha,Theta;

Theta=2*PI/n;

Alpha=PI/2-Theta;

for(int i=0;i<n;i++)

{

P[i].x =r*cos(Alpha+i*Theta);

P[i].y =r*sin(Alpha+i*Theta);

}

for(i=0;i<=n-2;i++)

{

for(int j=i+1;j<=n-1;j++)

{

pDC->MoveTo(Round(P[i].x) ,Round(P[i].y));

pDC->LineTo(Round(P[j].x) ,Round(P[j].y));

}

}

pDC->SelectObject(pOldPen);

NewPen.DeleteObject();

ReleaseDC(pDC);

}

实验地点

专业软件实验室

指导教师

李丽亚