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

上传人:b****5 文档编号:16085896 上传时间:2022-11-19 格式:DOCX 页数:12 大小:164.92KB
下载 相关 举报
江苏大学计算机图形学第三次实验报告二维图形变换Word格式.docx_第1页
第1页 / 共12页
江苏大学计算机图形学第三次实验报告二维图形变换Word格式.docx_第2页
第2页 / 共12页
江苏大学计算机图形学第三次实验报告二维图形变换Word格式.docx_第3页
第3页 / 共12页
江苏大学计算机图形学第三次实验报告二维图形变换Word格式.docx_第4页
第4页 / 共12页
江苏大学计算机图形学第三次实验报告二维图形变换Word格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

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

《江苏大学计算机图形学第三次实验报告二维图形变换Word格式.docx》由会员分享,可在线阅读,更多相关《江苏大学计算机图形学第三次实验报告二维图形变换Word格式.docx(12页珍藏版)》请在冰豆网上搜索。

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

20%

算法设计

算法描述的正确性与可读性

编码实现

源代码正确性与可读性

30%

程序书写规范

标识符定义规范,程序书写风格规范

报告质量

报告清晰,提交准时

10%

总分

指导教师签名

二维图形变换

1.实验内容

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

首先要建好图示的北极星图案的数据模型(顶点表、边表)。

另外,可重复调用“清屏”和“暂停”等函数,使整个变换过程具有动态效果。

2.实验环境

操作系统:

WindowsXP

开发工具:

visualstudio2008

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.源代码

//北极星

voidhzbjx(CDC*pDC,longx[18],longy[18])

{

CPennewPen1,*oldPen;

newPen1.CreatePen(PS_SOLID,2,RGB(255,0,0));

oldPen=pDC->

SelectObject(&

newPen1);

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

POINTvertex2[5]={{x[6],y[6]},{x[8],y[8]},{x[9],y[9]},{x[3],y[3]},{x[8],y[8]}};

Polyline(vertex2,5);

POINTvertex3[5]={{x[4],y[4]},{x[10],y[10]},{x[11],y[11]},{x[3],y[3]},{x[10],y[10]}};

Polyline(vertex3,5);

newPen1.CreatePen(PS_SOLID,2,RGB(255,0,90));

POINTvertex4[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]}};

Polyline(vertex4,11);

newPen1.CreatePen(PS_SOLID,2,RGB(0,100,255));

POINTvertex5[5]={{x[15],y[15]},{x[16],y[16]},{x[3],y[3]},{x[16],y[16]},{x[7],y[7]}};

Polyline(vertex5,5);

POINTvertex6[5]={{x[2],y[2]},{x[17],y[17]},{x[3],y[3]},{x[17],y[17]},{x[13],y[13]}};

Polyline(vertex6,5);

SelectObject(oldPen);

Sleep(10);

}

voidCDiamondView:

:

Polaris()

{

InvalidateRgn(NULL);

UpdateWindow();

CDC*pDC=GetDC();

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

longx1[18],y1[18];

//缩小

for(doublen=1;

n>

=0.5;

n-=0.01)

{

for(inti=1;

i<

18;

i++)

{

x1[i]=Round(x[i]*n);

y1[i]=Round(y[i]*n);

}

hzbjx(pDC,x1,y1);

Sleep(10);

InvalidateRect(NULL);

}

longx2[18],y2[18];

//放大

n<

=1.5;

n+=0.01)

x2[i]=Round(x1[i]*n);

y2[i]=Round(y1[i]*n);

hzbjx(pDC,x2,y2);

longx3[18],y3[18];

//沿X轴平移

for(intn=0;

=300;

n+=2)

for(intj=1;

j<

j++)

{

x3[j]=x[j]+n;

y3[j]=y[j];

}

hzbjx(pDC,x3,y3);

Sleep

(1);

longx4[18],y4[18];

//沿Y轴平移

x4[j]=x3[j];

y4[j]=y3[j]+n;

hzbjx(pDC,x4,y4);

longx5[18],y5[18];

//顺时针旋转

for(doublet=0;

t<

=PI;

t+=0.01)

for(intk=1;

k<

k++)

x5[k]=Round(x[k]*cos(t)-y[k]*sin(t)-x[3]*cos(t)+y[3]*sin(t)+x[3]);

y5[k]=Round(x[k]*sin(t)+y[k]*cos(t)-x[3]*sin(t)-y[3]*cos(t)+y[3]);

hzbjx(pDC,x5,y5);

UpdateWindow();

longx6[18],y6[18];

//逆时针旋转

for(doublet=PI;

t>

=0;

t-=0.01)

x6[k]=Round(x[k]*cos(t)-y[k]*sin(t)-x[3]*cos(t)+y[3]*sin(t)+x[3]);

y6[k]=Round(x[k]*sin(t)+y[k]*cos(t)-x[3]*sin(t)-y[3]*cos(t)+y[3]);

hzbjx(pDC,x6,y6);

longx7[18],y7[18];

//沿X=1000对称

for(intl=1;

l<

l++)

x[l]=Round(x[l]*0.5);

y[l]=Round(y[l]*0.5);

x7[l]=1000-x[l];

y7[l]=y[l];

hzbjx(pDC,x7,y7);

Sleep(200);

longx8[18],y8[18];

//沿Y=600对称

x8[l]=x[l];

y8[l]=600-y[l];

hzbjx(pDC,x8,y8);

longx9[18],y9[18];

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1