1. <form id='Nv6Fzy'></form>
        <bdo id='Nv6Fzy'><sup id='Nv6Fzy'><div id='Nv6Fzy'><bdo id='Nv6Fzy'></bdo></div></sup></bdo>

          • 当前位置:首页 >> 计算机软件及应用 >>

            计算机图形学 图形几何变换的实现


            实验五
            班级:信计二班 一、实验目的

            图形几何变换的实现
            姓名:解川 分数:

            学号:20080502065

            为了掌握理解二维、三维的数学知识、变换原理、变换种类、变换方法;进一步 理解采用齐次坐标进行二维、三维变换的必要性;利用 VC++语言实现二维、三 维图形的基本变换和复合变换。 二、实验内容 (1) 理解采用齐次坐标进行图形变换的必要性——变换的连续性, 使复合变换 得以实现。 (2) 掌握二维、三维图形基本变换的原理及数学公式。 (3) 利用 VC++语言实现二维、三维图形的基本变换、复合变换,在评不上显 示变换过程或变换结果。 三、实验步骤 (1) 预习教材关于二维、三维图形变换的原理和方法。 (2) 使用 VC++语言实现某一种或几种基本变换。 (3) 调试、编译、运行程序。 四、原理分析 源程序分别实现了对二维图形进行的平移变换—基本变换; 对三维图形进行的绕 某一个坐标轴旋转变换以及相对于立方体中心的比例变换—复合变换。 三维几何变换:
            (1) 比例变换:

            ? x1

            y1

            z1

            1? = ? x

            y

            z

            1 ? T3D= ? x

            y

            z

            ?q ? d 1? ? ?h ? ?l

            b e i m

            c f j n

            p? ? q ? r? ? s?

            局部比例变换:
            ?a ? 0 Ts =? ?0 ? ?0 0 e 0 0 0 0 j 0 0? ? 0 ? 其中 a、b、j 分别为在 x、y、z 方向的比例系数。 0? ? 1?

            1

            整体比例变换:
            ?1 ? 0 Ts =? ?0 ? ?0 0 1 0 0 0 0 1 0 0? ? 0 ? 其中 s 为在 xyz 方向的等比例系数。S>1 时,整体缩小;s<1 时,整体放 0? ? s?

            大。

            (2) 旋转变换:

            旋转变换的角度方向为(沿坐标轴的反方向看去,各轴按逆时针方向旋转) 绕 z 轴旋转:
            ? cos ? ? ? sin ? =? ? 0 ? 0 ? sin ? cos ? 0 0 0 0 1 0 0? ? 0 ? 0? ? 1?

            T RZ

            绕 x 轴旋转:
            ?1 ? 0 =? ?0 ? ?0 0 cos ? ? sin ? 0 0 sin ? cos ? 0 0? ? 0 ? 0? ? 1?

            T RX

            绕 y 轴旋转:
            ? cos ? ? 0 =? ? sin ? ? ? 0 0 1 0 0 ? sin ? 0 cos ? 0 0? ? 0 ? 0? ? 1?

            T RY

            程序代码: /*三维图形(立方体)旋转变换、比例变换*/ #include <stdio.h> #include <math.h> #include <graphics.h> #include <conio.h> #include <time.h> #include <ctype.h> #define ZOOM_IN 0.9 #define ZOOM_OUT 1.1
            2

            int turn1[3];/*[0]rx,[1]ry,[3]zoom*/ typedef struct { float x; float y; float z; }point; typedef struct { float x; float y; }point2d; typedef struct { float x; float y; float h; point biao[8]; }fanti; void make_box(float x,float y,float h,fanti *p) { p->x=x;p->y=y;p->h=h; p->biao[0].x=x/2; p->biao[0].y=y/2; p->biao[0].z=h/2; p->biao[1].x=-x/2; p->biao[1].y=y/2; p->biao[1].z=h/2; p->biao[2].x=-x/2; p->biao[2].y=-y/2; p->biao[2].z=h/2; p->biao[3].x=x/2; p->biao[3].y=-y/2; p->biao[3].z=h/2; p->biao[4].x=x/2; p->biao[4].y=y/2; p->biao[4].z=-h/2; p->biao[5].x=-x/2; p->biao[5].y=y/2; p->biao[5].z=-h/2; p->biao[6].x=-x/2; p->biao[6].y=-y/2; p->biao[6].z=-h/2; p->biao[7].x=x/2; p->biao[7].y=-y/2; p->biao[7].z=-h/2; } void trun2d(point *p,point2d *q) { q->x=p->x+p->z*cos(0.25); q->y=p->y+p->z*sin(0.25);
            3

            } void initm(float mat[][4]) { int count; for(count=0;count<4;count++) { mat[count][0]=0.; mat[count][1]=0.; mat[count][2]=0.; mat[count][3]=0.; mat[count][count]=1.; } return; } void transfrom(point *p,point *q,float tm[][4]) { float xu,yv,zw,h; xu=tm[0][0]*p->x+tm[1][0]*p->y+tm[2][0]*p->z+tm[3][0]; yv=tm[0][1]*p->x+tm[1][1]*p->y+tm[2][1]*p->z+tm[3][1]; zw=tm[0][2]*p->x+tm[1][2]*p->y+tm[2][2]*p->z+tm[3][2]; p->x=xu; p->y=yv; p->z=zw; return; } void rotationx(point *p,float alfa,float tm[][4]) { float rad=0.0174532925; initm(tm); tm[1][1]=cos(rad*alfa); tm[1][2]=sin(rad*alfa); tm[2][1]=-tm[1][2]; tm[2][2]=tm[1][1]; return; }
            4

            void rotationz(point *p,float alfa,float tm[][4]) { float rad=0.0174532925; initm(tm); tm[0][0]=cos(rad*alfa); tm[0][1]=sin(rad*alfa); tm[1][0]=-tm[0][1]; tm[1][1]=tm[0][0]; return; } void rotationy(point *p,float alfa,float tm[][4]) { float rad=0.0174532925; initm(tm); tm[0][0]=cos(rad*alfa); tm[2][0]=sin(rad*alfa); tm[0][2]=-tm[2][0]; tm[2][2]=tm[0][0]; return; } void adjust(point *p,point *q) { float t[4][4]; switch (turn1[0]) { case 1: rotationy(p,2,t); transfrom(p,q,t); break; case -1: rotationy(p,-2,t); transfrom(p,q,t); break; default:break; } switch (turn1[1])
            5

            { case 1: rotationz(p,2,t); transfrom(p,q,t); break; case -1: rotationz(p,-2,t); transfrom(p,q,t); break; default:break; } switch (turn1[2]) { case 1: q->x=ZOOM_IN*p->x; q->y=ZOOM_IN*p->y; q->z=ZOOM_IN*p->z; break; case -1: q->x=ZOOM_OUT*p->x; q->y=ZOOM_OUT*p->y; q->z=ZOOM_OUT*p->z; break; default:break; } } void drawbox(fanti *p) { point2d fan2d[8]; int i;
            6

            for(i=0;i<=7;i++) { adjust(&p->biao[i],&p->biao[i]); trun2d(&p->biao[i],&fan2d[i]); fan2d[i].x+=300; fan2d[i].y+=200; } cleardevice(); outtext(" -> :right moveto(0,20); outtext(" page up:zoom in Esc :exit"); for(i=0;i<=3;i++) { if(i==3) { line(fan2d[i].x,fan2d[i].y,fan2d[0].x,fan2d[0].y); line(fan2d[i+4].x,fan2d[i+4].y,fan2d[4].x,fan2d[4].y); page down:zoom out space :Redraw <- :left ^ :up v :down");

            } else { line(fan2d[i].x,fan2d[i].y,fan2d[i+1].x,fan2d[i+1].y); line(fan2d[i+4].x,fan2d[i+4].y,fan2d[i+5].x,fan2d[i+5].y); } line(fan2d[i].x,fan2d[i].y,fan2d[i+4].x,fan2d[i+4].y); } } void main() {
            7

            int gd=DETECT,gm,i,j; char key; float x,y,h; fanti a1; x=100; y=100; h=100; initgraph(&gd,&gm," "); setcolor(GREEN); make_box(x,y,h,&a1); for(;;) { turn1[0]=0; turn1[1]=0; turn1[2]=0; key=getch(); switch(key) { case 77: turn1[0]=1; break; case 75: turn1[0]=-1; break; case 72: turn1[1]=1; break; case 80: turn1[1]=-1; break; case 73: turn1[2]=1; break; case 81: turn1[2]=-1; break; case 32: make_box(x,y,h,&a1); break; case 27: exit(0); break;
            8

            /*RIGHT*/

            /*LIFT*/

            /*UP*/

            /*DOWN*/

            /*Zoom In*/

            /*Zoom Out*/

            /*Redraw*/

            default : key=0; break; } if(key!=0) drawbox(&a1); } closegraph(); }

            五、实验结果: 原始图形:

            左右旋转图形:

            9

            上下旋转图形:

            放大图形:

            10

            六、实验体会: 在老师的细心指导下, 利用本实验完成了在计算机中实现三维立体图形的缩放旋 转,对立体图形有了更深层次的认识,对 VC++有了更深层次的了解,让我对计 算机产生了更深刻的兴趣。而二维图形的变换只是三维的特例而已。

            11


            相关文章:
            计算机图形学 图形的几何变换的实现算法.doc
            计算机图形学 图形的几何变换的实现算法 - 实验二 图形的几何变换的实现算法 班级 08 信计 学号 59 姓名 分数 一、实验目的和要求: 1、 掌握而为图形的基本...
            计算机图形学 图形几何变换的实现.doc
            实验五 图形几何变换的实现班级 08 信计 2 班 学号 20080502053 姓名 杨少卿 分数 一、实验目的和要求: 1、掌握二维图形几何变换的基本原理及二维图形的几何算法...
            计算机图形学实验五 图形几何变换的实现.doc
            计算机图形学实验五 图形几何变换的实现 - 实验五 图形几何变换的实现 班级 0
            计算机图形学 图形几何变换的实现.txt
            计算机图形学 图形几何变换的实现 - 图形基本变换的变换原理及数学公式;进一步理
            计算机图形学04-图形几何变换.ppt
            计算机图形学 Computer Graphics 第4讲:图形几何变换 1 目录 CONTENTS 01 绪论 ...向量[x y] 改变顶点坐标, 也就是对向量的变换,向量运算必须用矩阵运算来实现...
            《计算机图形学》05 图形的几何变换.ppt
            《计算机图形学》05 图形的几何变换 - 第五章 图形的几何变换 5.1 概述 为了使被显示的对象数字化,通常是采用适当的坐标系 耒描述被处理的对象。图形和数字...
            计算机图形学-图形的几何变换.doc
            计算机图形学-图形的几何变换_计算机软件及应用_IT/计算机_专业资料。使用c#写的...3.掌握采用齐次坐标进行几何变换。 1.理解几何图形变换的原理,编程实现图形的...
            计算机图形学实验二(几何变换).doc
            计算机图形学实验二(几何变换) - 实验二几何变换 一、实验目的 (1)培养进行三维图形的绘制,几何变换设置等实现真实感绘制的能力 (2)掌握人机交互方法,培养交互...
            计算机图形学 第5章 几何变换.ppt
            计算机图形学 第5章 几何变换 - 计算机图形学基础教程(结合VC++ MFC),共八章分别为“第1章 绪论”,“第2章 图形系统的组成”,“第3章 二维线画图元及属性...
            计算机图形学实验五 图形几何变换的实现 (2).doc
            计算机图形学实验五 图形几何变换的实现 (2)_物理_自然科学_专业资料。实验五 图形几何变换的实现班级 08 信计 2 班 学号 91 姓名 王大鹏 分数 一、实验目的...
            计算机图形学第6章三维变换及三维观察.ppt
            如何进行投影变换 ? 如何方便地实现在显示设备上对三维图形进行观察 计算机图形学用户坐标系中 观察空间的定义 的几何形体 实现三维几何形体显示的流程 用户坐标系到...
            计算机图形学(三维几何变换).ppt
            计算机图形学(三维几何变换) - 计算机图形学 第4章 变换和裁剪 本章的目的
            北方工业大学 计算机图形学实验 几何变换.doc
            计算机图形学实验报告 02 北方工业大学 计算机图形学课程实验报告 题学专 目: 院: 业: 实验二 几何变换 指导教师: 学生班级: 学生学号: 学生姓名: 教师评定: ...
            计算机图形学几何变换算法具体程序实现.doc
            计算机图形学几何变换算法具体程序实现 - 数学与软件科学学院 实验报告 学期: 2010 年 11 月 3 日 学期: 2010 至 2011 第一 学期 课程名称: 计算机图形学 ...
            计算机图形学作业.doc
            《计算机图形学》实验报告 二维几何变换 专班学姓 业: 级: 号: 名: 2012.10.20 1002 完成日期: 1.实验目的 (1) 掌握二维平移、比例、旋转几何变换矩阵。 ...
            计算机图形学CG06-图形几何变换.ppt
            计算机图形学CG06-图形几何变换_数学_自然科学_专业资料。第6章 图形几何变换 ...? 便于变换合成 连续变换时,可以先得到变换的矩阵 便于硬件实现 19 6.3 齐次...
            计算机图形学教学大纲.doc
            《计算机图形学》课程教学大纲课程编号: 适用专业:机械工程自动化专业本科生 总...2.掌握二维图形、三维图形的生成方法及实现程序。 3.掌握二维图形几何变换的基本...
            计算机图形学课件二维图形变换.ppt
            图形变换 图形变换图形变换计算机图形学基础内容之一。 内容: 几何变换; 视图...对于用参数方程描述的图形,可以通过参数方 程几何变换,实现图形的变换(基于...
            计算机图形学复习提纲.doc
            计算机图形学复习提纲_IT/计算机_专业资料。计算机图形学考试提纲及答案 ...优点 表示简单 容易实现几何变换 基本体素可以按需选择,表示范围较广 可以精确...
            计算机图形学3.ppt
            计算机图形学3 - 图形变换:通过图形的几何变换可以产生新 的图形。 ?图形不动,坐标系变动 ?坐标系不动,图形移动 齐次坐标 所谓齐次坐标法,就是用n+1维向量来...
            更多相关标签: