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
{
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));