人人范文网 范文大全

3D图形变换汇总

发布时间:2020-03-02 21:11:54 来源:范文大全 收藏本文 下载本文 手机版

徐龙飞

201407104131

3D图形变换

一. 实验目的:

掌握3D图像的变换,了解多数的3D变换,平移,旋转等几何变换,还有投影变换等知识。

二. 实验原理:

3D图像的移动,比例变化,旋转等几何变换算法原理及各种投影变换算法原理。

三. 实验步骤:

一. 建立MFC单文档程序,用来编写3D变换。

二. 建立Mainframe,并设计,添加相应的ID及映射函数。

三. 实验的主要代码:

1、设计3维图形平移变换算法的实现程序; void CMyView::OnTranslation() { m_Select=SEL_TS; m_str=\"平移\"; CBaseCla my1; //构造新的CBaseCla对象

int i,j; for ( i=1;i

{

for ( j=1;j

my1.A[i][j]=0;

}

1

徐龙飞

201407104131

my1.A[1][1]=1; my1.A[2][2]=1; my1.A[4][4]=1; my1.A[3][3]=1; my1.A[4][1]=20; //x轴方向上平移

my1.A[4][2]=28; //y轴方向上平移

my1.A[4][3]=28; //z轴方向上平移

my1.Draw(); }

2、设计3维图形缩放变换算法的实现程序; void CMyView::OnScalingS() { m_Select=SEL_MO; m_str=\"整体变比\"; CBaseCla my1; //构造新的CBaseCla对象

int i,j;

for ( i=1;i

{

for ( j=1;j

my1.A[i][j]=0;

}

my1.A[1][1]=1;

my1.A[2][2]=1;

my1.A[3][3]=1;

my1.A[4][4]=0.5;

my1.Draw(); } void CMyView::OnScalingXyz() { m_Select=SEL_MO; m_str=\"XYZ变比\"; CBaseCla my1; //构造新的CBaseCla对象

int i,j; for ( i=1;i

{

for ( j=1;j

my1.A[i][j]=0;

2

徐龙飞

201407104131

}

my1.A[1][1]=2; //x轴方向上比例

my1.A[2][2]=1; //y轴方向上比例

my1.A[3][3]=2; //z轴方向上比例

my1.A[4][4]=1;

my1.Draw();}

3、设计3维图形旋转变换算法的实现程序。 void CMyView::OnRotationX() { m_Select=SEL_RX; m_str=\"关于X轴旋转\"; CBaseCla my1; //构造新的CBaseCla对象

int i,j;

for ( i=1;i

{

for ( j=1;j

my1.A[i][j]=0;

}

my1.A[1][1]=1;

my1.A[2][2]=cos(70*PI/180);//旋转70度

my1.A[3][2]=sin(70*PI/180);

my1.A[2][3]=-sin(70*PI/180);

my1.A[3][3]=cos(70*PI/180);

my1.A[4][4]=1;

my1.Draw(); } void CMyView::OnRotationY() { m_Select=SEL_RY; m_str=\"关于Y轴旋转\"; CBaseCla my1; //构造新的CBaseCla对象

int i,j;

for ( i=1;i

{

for ( j=1;j

my1.A[i][j]=0;

}

3

徐龙飞

201407104131

my1.A[2][2]=1;

my1.A[1][1]=cos(80*PI/180);//旋转80度

my1.A[3][1]=sin(80*PI/180);

my1.A[1][3]=-sin(80*PI/180);

my1.A[3][3]=cos(80*PI/180);

my1.A[4][4]=1;

my1.Draw(); } void CMyView::OnRotationZ() { m_Select=SEL_RZ; m_str=\"关于Z轴旋转\"; CBaseCla my1; //构造新的CBaseCla对象

int i,j;

for ( i=1;i

{

for ( j=1;j

my1.A[i][j]=0;

}

my1.A[3][3]=1;

my1.A[1][1]=cos(60*PI/180);//旋转60度

my1.A[1][2]=sin(60*PI/180);

my1.A[2][1]=-sin(60*PI/180);

my1.A[2][2]=cos(60*PI/180);

my1.A[4][4]=1;

my1.Draw(); } 4.设计3维图形错切变换算法的实现程序: void CMyView::OnShX() { // TODO: Add your command handler code here m_Select=SEL_SHX; m_str=\"X方向错切\"; CBaseCla my1; //构造新的CBaseCla对象

int i,j;

for ( i=1;i

4

徐龙飞

201407104131

{

for ( j=1;j

my1.A[i][j]=0;

}

my1.A[1][1]=1;

my1.A[2][2]=1;

my1.A[3][3]=1;

my1.A[4][4]=1;

my1.A[1][2]=0.5; //为0错切平面离开Z轴,沿X方向移动

my1.A[1][3]=0.5; //为0错切平面离开Y轴,沿X方向移动

my1.Draw(); } void CMyView::OnShY() { // TODO: Add your command handler code here m_Select=SEL_SHY; m_str=\"Y方向错切\"; CBaseCla my1; //构造新的CBaseCla对象

int i,j;

for ( i=1;i

{

for ( j=1;j

my1.A[i][j]=0;

}

my1.A[1][1]=1;

my1.A[2][2]=1;

my1.A[3][3]=1;

my1.A[4][4]=1;

my1.A[1][2]=0.5; //为0错切平面离开Z轴,沿Y方向移动

my1.A[3][2]=0.5; //为0错切平面离开X轴,沿Y方向移动

// RedrawWindow();

my1.Draw();

5

徐龙飞

201407104131 } void CMyView::OnV() { // TODO: Add your command handler code here m_Select=SEL_V; m_str=\"主视图\";

int i,j;

CBaseCla my1; //构造新的CMyCla对象

//将主视图变换矩阵清零

for ( i=1;i

{

for ( j=1;j

my1.A[i][j]=0;

}

//给主视图变换矩阵赋值

my1.A[1][1]=1;

my1.A[3][3]=1;

my1.A[4][4]=1;

RedrawWindow();

my1.Display(); } 5.设计3维图形对称变换算法的实现程序: void CMyView::OnMirrorO() { // TODO: Add your command handler code here m_Select=SEL_MO; m_str=\"关于原点对称\"; CBaseCla my1; //构造新的CBaseCla对象

int i,j;

for ( i=1;i

{

for ( j=1;j

my1.A[i][j]=0;

}

my1.A[1][1]=-1;

my1.A[2][2]=-1;

6

徐龙飞

201407104131

my1.A[3][3]=-1;

my1.A[4][4]=1; my1.Draw(); } void CMyView::OnMirrorOxy() { // TODO: Add your command handler code here m_Select=SEL_MOXY; m_str=\"关于OXY平面对称\"; CBaseCla my1; //构造新的CBaseCla对象

int i,j;

for ( i=1;i

{

for ( j=1;j

my1.A[i][j]=0;

}

my1.A[1][1]=1;

my1.A[2][2]=1;

my1.A[3][3]=-1;

my1.A[4][4]=1; my1.Draw(); } void CMyView::OnMirrorOyz() { // TODO: Add your command handler code here m_Select=SEL_MOYZ; m_str=\"关于OYZ平面对称\"; CBaseCla my1; //构造新的CBaseCla对象

int i,j;

for ( i=1;i

{

for ( j=1;j

my1.A[i][j]=0;

}

my1.A[1][1]=-1;

my1.A[2][2]=1;

7

徐龙飞

201407104131

my1.A[3][3]=1;

my1.A[4][4]=1; my1.Draw(); } void CMyView::OnMirrorOzx() { // TODO: Add your command handler code here m_Select=SEL_MOZX; m_str=\"关于OZX平面对称\"; CBaseCla my1; //构造新的CBaseCla对象

int i,j;

for ( i=1;i

{

for ( j=1;j

my1.A[i][j]=0;

}

my1.A[1][1]=1;

my1.A[2][2]=-1;

my1.A[3][3]=1;

my1.A[4][4]=1;

my1.Draw(); } void CMyView::OnMirrorX() { // TODO: Add your command handler code here m_Select=SEL_MX; m_str=\"关于X对称\"; CBaseCla my1; //构造新的CBaseCla对象

int i,j;

for ( i=1;i

{

for ( j=1;j

my1.A[i][j]=0;

}

my1.A[1][1]=1;

my1.A[2][2]=-1;

my1.A[3][3]=-1;

8

徐龙飞

201407104131 my1.A[4][4]=1; my1.Draw(); } void CMyView::OnMirrorY() { // TODO: Add your command handler code here m_Select=SEL_MY; m_str=\"关于Y对称\"; CBaseCla my1; //构造新的CBaseCla对象

int i,j;

for ( i=1;i

{

for ( j=1;j

my1.A[i][j]=0;

}

my1.A[1][1]=-1;

my1.A[2][2]=1;

my1.A[3][3]=-1;

my1.A[4][4]=1; my1.Draw(); } void CMyView::OnMirrorZ() { // TODO: Add your command handler code here m_Select=SEL_MZ; m_str=\"关于Z对称\"; CBaseCla my1; //构造新的CBaseCla对象

int i,j;

for ( i=1;i

{

for ( j=1;j

my1.A[i][j]=0;

}

my1.A[1][1]=-1;

my1.A[2][2]=-1;

my1.A[3][3]=1;

my1.A[4][4]=1;

9

徐龙飞

201407104131

my1.Draw(); } 6.设计3维图形平行投影变换算法的实现程序: void CMyView::OnV() { // TODO: Add your command handler code here m_Select=SEL_V; m_str=\"主视图\";

int i,j;

CBaseCla my1; //构造新的CMyCla对象

//将主视图变换矩阵清零

for ( i=1;i

{

for ( j=1;j

my1.A[i][j]=0;

}

//给主视图变换矩阵赋值

my1.A[1][1]=1;

my1.A[3][3]=1;

my1.A[4][4]=1;

RedrawWindow();

my1.Display(); } void CMyView::OnW() {

// TODO: Add your command handler code here

m_Select=SEL_H;

m_str=\"侧视图\";

int i,j;

CBaseCla my1; //构造新的CMyCla对象

//将俯视图变换矩阵清零

//将侧视图变换矩阵清零

for (i=1;i

{

for (j=1;j

my1.Aw[i][j]=0;

}

10

徐龙飞

201407104131

//给侧视图变换矩阵赋值

my1.Aw[2][1]=-1;

my1.Aw[3][3]=1;

my1.Aw[4][4]=1;

RedrawWindow();

my1.Display(); } void CMyView::OnH() { // TODO: Add your command handler code here m_Select=SEL_H; m_str=\"俯视图\";

int i,j;

CBaseCla my1; //构造新的CMyCla对象

//将俯视图变换矩阵清零

for (i=1;i

{

for (j=1;j

my1.Ah[i][j]=0;

}

//给俯视图变换矩阵赋值

my1.Ah[1][1]=1;

my1.Ah[2][3]=-1; // my1.Ah[4][3]=10; //俯视图平移量

my1.Ah[4][4]=1;

RedrawWindow(); my1.Display(); } void CMyView::OnSe() { // TODO: Add your command handler code here

m_Select=SEL_SE; m_str=\"斜等测视图\";

int i,j;

CBaseCla my1; //构造新的CBaseCla对象

for ( i=1;i

11

徐龙飞

201407104131

{

for ( j=1;j

my1.A[i][j]=0;

}

my1.A[1][1]=1;

my1.A[2][2]=1;

my1.A[3][1]=0.707f; //X方向错切位移量

my1.A[3][2]=0.707f; //Y方向错切位移量

my1.A[4][4]=1;

RedrawWindow();

my1.Drawse(); } void CMyView::OnSt() { // TODO: Add your command handler code here m_Select=SEL_ST; m_str=\"斜二测视图\";

int i,j;

CBaseCla my1; //构造新的CMyCla对象

for ( i=1;i

{

for ( j=1;j

my1.A[i][j]=0;

}

my1.A[1][1]=1;

my1.A[2][2]=1;

my1.A[3][1]=0.3535f; //X方向错切位移量

my1.A[3][2]=0.3535f; //Y方向错切位移量

my1.A[4][4]=1;

RedrawWindow();

my1.Drawvt();

}

void CMyView::OnVe() { // TODO: Add your command handler code here m_Select=SEL_VE;

12

徐龙飞

201407104131 m_str=\"正等测视图\";

int i,j;

CBaseCla my2; //构造新的CMyCla对象

my2.theta_y =45; //Y轴夹角

my2.phi_x=125; //X轴夹角

//给正等测变换矩阵清零

for ( i=1;i

{

for ( j=1;j

my2.A[i][j]=0;

}

//给正等测变换矩阵赋值

my2.A[1][1]=(float)cos(my2.theta_y*PI/180); my2.A[1][2]=(float)sin(my2.theta_y*PI/180)*(float)sin(my2.phi_x*PI/180);

my2.A[2][2]=(float)cos(my2.phi_x*PI/180);

my2.A[3][1]=(float)sin(my2.theta_y*PI/180); my2.A[3][2]=(float)-cos(my2.theta_y*PI/180)*(float)sin(my2.phi_x*PI/180);

my2.A[4][4]=1;

RedrawWindow();

my2.Drawve(); } void CMyView::OnVt() { // TODO: Add your command handler code here m_Select=SEL_VT; m_str=\"正二测视图\";

int i,j;

CBaseCla my2; //构造新的CMyCla对象

my2.theta_y =115; //Y轴夹角25-115

my2.phi_x=25; //X轴夹角

//给正二测变换矩阵清零

for ( i=1;i

{

for ( j=1;j

13

徐龙飞

201407104131

my2.A[i][j]=0;

}

//给正二测变换矩阵赋值

my2.A[1][1]=(float)cos(my2.theta_y*PI/180); my2.A[1][2]=(float)sin(my2.theta_y*PI/180)*(float)sin(my2.phi_x*PI/180);

my2.A[2][2]=(float)cos(my2.phi_x*PI/180);

my2.A[3][1]=(float)sin(my2.theta_y*PI/180); my2.A[3][2]=(float)-cos(my2.theta_y*PI/180)*(float)sin(my2.phi_x*PI/180);

my2.A[4][4]=1;

RedrawWindow();

my2.Drawvt();

} 四. 实验结果:

1.原三维图:

2.平移:

3.旋转:(沿x,y,z轴)

14

徐龙飞

201407104131

4.变比:

5.对称

15

徐龙飞

201407104131

6.错切:

7.平行投影->三视图:

16

徐龙飞

201407104131 8.平行投影->正轴测图:

9.平行投影->斜轴测图:

10.透视图:

五. 心得体会:

通过上机写程序对3D图像变换有了更深刻的了解。图像学跟现实中的很多科技联系紧密。对图形学这门学科也有了跟深刻的认识。

17

图形的变换

学前班数学教案:图形变换

图形的变换教案设计

《图形与变换》学案

《图形与变换》说课稿

图形变换教学反思

3d计算机图形教学

第一单元 图形的变换

第一单元 图形的变换

《图形的变换》教学设计

3D图形变换汇总
《3D图形变换汇总.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
相关专题 3d图形变换 图形
点击下载本文文档