江苏大学 计算机图形学第三次实验报告 二维图形变换

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机科学与通信工程学院

实验报告

课程计算机图形学

实验题目二维图形变换

学生姓名

学号

专业班级

指导教师

日期

成绩评定表

二维图形变换

1. 实验内容

完成对北极星图案的缩放、平移、旋转、对称等二维变换。

首先要建好图示的北极星图案的数据模型(顶点表、边表)。另外,可重复调用“清屏”和“暂停”等函数,使整个变换过程具有动态效果。

2. 实验环境

操作系统:Windows XP

开发工具:visual studio 2008

3. 问题分析

为了建立北极星图形,首先在二维空间中根据坐标绘制出北极星图形。并且在此坐标系中确定好走笔顺序以便于进行连线操作。

同时需要好好的使用清屏函数以使得显示正常。

1. 放大缩小变换

放大缩小变换公式为:x’=x.a, y’=y.d; 其中a,d分别为x,y方向的放缩比例系数。

可通过不同的比例系数来显示程序运行结果。当a=d时为等比例放缩操作。可令变换矩阵为T。

2. 对称变换

包括以x轴对称、y轴对称和原点O对称三种。由于屏幕坐标只有第一象限,我们可以将原点平移到(500,240)处。在第一象限画出一个三角形,然后分别求出三个对称图形。

3. 旋转变换

将图形上的点(x,y)旋转θ角度,得到新的坐标(x’,y’)为:

x’=xcosθ-ysinθ, y’=xsinθ+ycosθ;

旋转矩阵T为4.平移变换

4. 算法设计

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

相关文档
最新文档