计算机图形学金刚石程序编码,计算机图形学金刚石算法实验报告.doc

本文记录了一次计算机图形学实验,实验内容包括使用C++实现金刚石图案算法,涉及二维点类定义、对话框创建、内存管理和自定义菜单。通过输入对话框获取等分点个数,绘制不同数量等分点的金刚石图案,并展示了实验结果。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值