计算机图形学实验三报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机科学与通信工程学院
实验报告
课程计算机图形学
实验题目二维图形变换
学生姓名
学号
专业班级
指导教师
日期
成绩评定表
二维图形变换
1. 实验内容
完成对北极星图案的缩放、平移、旋转、对称等二维变换。
提示:首先要建好图示的北极星图案的数据模型(顶点表、边表)。另外,可重复调用“清屏”和“暂停”等函数,使整个变换过程具有动态效果。
2. 实验环境
软硬件运行环境:Windows XP
开发工具:visual studio 2008
3. 问题分析
4. 算法设计
程序框架:
//DiamondView.h
class CDiamondView : public CView
{
……
public:
//参数输入和提示对话框
void Polaris();//北极星
……
};
//DiamondView.cpp
void CDiamondView::OnMenuDiamond()
{
IsCutting = FALSE;
if(dlgDiamond.DoModal()==IDOK)
DrawDiamond(dlgDiamond.m_nVertex,dlgDiamond.
m_nRadius,100);//调用绘制金刚石的函数
}
//北极星
void CDiamondView::Polaris()
{......}
5. 源代码
//北极星
void hzbjx(CDC* pDC,long x[18],long y[18])
{
CPen newPen1,*oldPen;
newPen1.CreatePen(PS_SOLID,2,RGB(255,0,0));
oldPen = pDC->SelectObject(&newPen1);
POINT
vertex1[11]={{x[1],y[1]},{x[2],y[2]},{x[3],y[3]},{x[4],y[4]},{x[5],y[5]},{x[3],y[3]},{x[1],y[1]}, {x[6],y[6]},{x[3],y[3]},{x[7],y[7]},{x[5],y[5]}};
pDC->Polyline(vertex1, 11);
newPen1.DeleteObject();
newPen1.CreatePen(PS_SOLID, 2, RGB(0,255,0));
oldPen = pDC->SelectObject(&newPen1);
POINT vertex2[5]={{x[6],y[6]},{x[8],y[8]},{x[9],y[9]},{x[3],y[3]},{x[8],y[8]}};
pDC->Polyline(vertex2, 5);
POINT vertex3[5]={{x[4],y[4]},{x[10],y[10]},{x[11],y[11]},{x[3],y[3]},{x[10],y[10]}};
pDC->Polyline(vertex3, 5);
newPen1.DeleteObject();
newPen1.CreatePen(PS_SOLID, 2, RGB(255,0,90));
oldPen = pDC->SelectObject(&newPen1);
POINT
vertex4[11]={{x[12],y[12]},{x[13],y[13]},{x[3],y[3]},{x[9],y[9]},{x[14],y[14]},{x[15],y[15]}, {x[3],y[3]},{x[11],y[11]},{x[12],y[12]},{x[3],y[3]},{x[14],y[14]}};
pDC->Polyline(vertex4, 11);
newPen1.DeleteObject();
newPen1.CreatePen(PS_SOLID, 2, RGB(0,100,255));
oldPen = pDC->SelectObject(&newPen1);
POINT vertex5[5]={{x[15],y[15]},{x[16],y[16]},{x[3],y[3]},{x[16],y[16]},{x[7],y[7]}};
pDC->Polyline(vertex5, 5);
POINT vertex6[5]={{x[2],y[2]},{x[17],y[17]},{x[3],y[3]},{x[17],y[17]},{x[13],y[13]}};
pDC->Polyline(vertex6, 5);
pDC->SelectObject(oldPen);
Sleep(10);
}
void CDiamondView::Polaris()
{
InvalidateRgn(NULL);
UpdateWindow();
CDC *pDC = GetDC();
long x[18],y[18];
x[1]=553,y[1]=100;
x[2]=515,y[2]=251;
x[3]=553,y[3]=338;
x[4]=516,y[4]=426;
x[5]=553,y[5]=551;
x[6]=589,y[6]=253;
x[7]=591,y[7]=426;
x[8]=678,y[8]=212;
x[9]=641,y[9]=311;
x[10]=454,y[10]=438;
x[11]=478,y[11]=364;
x[12]=415,y[12]=338;
x[13]=466,y[13]=301;
x[14]=703,y[14]=338;
x[15]=640,y[15]=375;
x[16]=665,y[16]=450;
x[17]=440,y[17]=226;
hzbjx(pDC,x,y);
Sleep(500); InvalidateRect(NULL); UpdateWindow();
long x1[18],y1[18]; //缩小
for(double n=1;n>=0.5;n-=0.01)