《计算机图形学课程设计报告简单图形的绘制.doc》由会员分享,可在线阅读,更多相关《计算机图形学课程设计报告简单图形的绘制.doc(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机图形学课程设计报告学生姓名: 学 号: 学 院: 班 级: 题 目:简单图形的绘制 指导教师: 职称: 2015年7月1日目 录目 录I一、选题背景1二、算法设计22.1 绘制直线、圆、椭圆、抛物线22.1.1 绘制直线22.1.2 绘制圆22.1.3 绘制椭圆22.1.4 绘制抛物线22.2 三维几何变换2三、程序及功能说明53.1 绘制直线、圆、椭圆、抛物线53.1.1 绘制直线53.1.2 绘制圆53.1.3 绘制椭圆53.1.4 绘制抛物线63.2 图形的平移6 3.3 图形的旋转6 3.4 图形的缩放7四、结果分析74.1 绘制直线、圆、椭圆、抛物线74.1.1 直线74.1.
2、2 圆84.1.3 椭圆84.1.4 抛物线8 4.2 图形的平移9 4.3 图形的旋转10 4.4 图形的缩放11五、总 结13六、课程设计心得体会14参考文献15源程序16一、选题背景二、算法设计 绘制直线、圆、椭圆、抛物线 绘制直线通过两个点的坐标来绘制直线。计算机图形学中二维图形在显示输出之前需要扫描转换,生成直线的算法一般有DDA算法和中点算法。 绘制圆通过运用圆的参数方程来绘制圆的图形,其中,(a,b)为圆心,r为半径,运用参数方程,只需要确定半径的长度和圆心的位置,即可绘制出圆。 绘制椭圆通过运用椭圆的参数方程来绘制椭圆的图形,其中,是已知的变量,a,b分别为长半轴,短半轴,当确
3、定a和b后,通过参数方程即可得到这个椭圆的方程。 绘制抛物线根据点绘制抛物线图像是通过拟合完成,根据三个点的坐标,通过数据拟合,得到经过这三个点的函数关系式,从而再根据这个函数关系式绘制出抛物线上其他的点,形成一条连续的抛物线;或直接根据已知函数绘制图像是通过已知函数画出图像。 三维几何变换 三维几何变换是二维几何变换的推广。二维几何变换在齐次坐标空间中可用33的变换矩阵表示,类似的,三维几何变换在齐次坐标空间中可用44的变换矩阵表示。三维空间中的点的齐次坐标定义为,其中,为不等与零的任意常数,。亦即点对应4维齐次坐标空间的一条直线: (2.)通常为了简单起见,取为的齐次坐标。(1)平移变换平
4、移变换将点在三个坐标轴方向上分别移动距离,得到新的一点,它们之间的关系表示为:,其中 。三维平移变换在其次坐标下的矩阵表示为: (2.)(2)放缩变换三维放缩变换在齐次坐标下的矩阵表示: (2.)此变换的参照点为坐标原点,我们可以按下面步骤建立关于空间任一参照点的缩放变换:(1)平移使落于原点,变换为;(2)进行放缩变换;(3)平移回到原先的位置,变换为。从而关于参照点的缩放变换为 (2.)(3)旋转变换 给定一点,首先将点和坐标表示成极坐标,即,其中。将点绕轴旋转角后,得到。易知: (2.2.5)上式矩阵形式为: (2.2.6)从而绕轴旋转角的变换在齐次坐标下的矩阵表示为: (2.2.7)类
5、似的,绕轴和轴的旋转的变换矩阵分别为: (2.2.8) (2.2.9)如果要绕空间任意轴旋转角,可按如下步骤实现:(1)以为原点,为轴建立新的坐标系; (2)求出从坐标系到坐标系的变换; (3)将图形对象变换到坐标系中; (4)在新坐标系中绕轴旋转角,变换为; (5)将图形对象变换为原坐标系中,变换为。这样绕旋转角的变换为: (2.)三、程序及功能说明 绘制直线、圆、椭圆、抛物线 绘制直线plot(A,B)通过运用matlab中的plot函数画出两点之间的直线图像。其中A,B为直线上的两个点的坐标,通过两点绘制直线。 绘制圆function circle(A,R)alpha=0:pi/50:2
6、*pi;%角度0,2*pi %R=2;%半径 x=R*cos(alpha)+A(1); y=R*sin(alpha)+A(2); plot(x,y,-) axis equal首先先对角度alpha分割成小区间,且求出相应的cos和sin值,再根据输入的半径和圆心坐标A,带入公式求得圆上的点的坐标,再绘制出图像。 绘制椭圆function tuocircle(a,b)t=0:pi/20:2*pi; x=a*cos(t); y=b*sin(t); plot(x,y)首先先对角度t分割成小区间得出相应的cos和sin值,根据再根据输入的长半轴a与短半轴b完善参数方程求得椭圆上的点的坐标,再绘制出图像
7、。 绘制抛物线function parabola(A,B,C)x=A(1) B(1) C(1); y=A(2) B(2) C(2); %y=ax2+b p=polyfit(x,y,2); t=-10:.1:10;%指定绘图区间 s=polyval(p,t); plot(t,s,x,y,or)通过三个点绘制抛物线是通过三点的拟合绘制出图像;通过函数是在一个区间上画出函数图像。 图形的平移function change(T1,V1)中: T=1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1; T(1,4)=T1(1); T(2,4)=T1(2); T(3,4)=T1(3); ALL=
8、T %最后的变换矩阵V2=ALL*V1;V=V2;先设T为平移变换矩阵,然后通过带入平移的长度,形成最终的平移矩阵,成为最重的变换举证ALL,将ALL左乘须变换矩阵V1,最终得到变换后的图形矩阵V。图形的旋转function change2(R1,V1)R=0 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1;sina=sin(R1); cosa=cos(R1); R(1,1)=cosa; R(1,2)=-sina; R(2,1)=sina; R(2,2)=cosa; ALL=R %最后的变换矩阵V2=ALL*V1;V=V2;先设R为旋转变换矩阵,首先就将带入的角度求出sina和co
9、sa值,然后对应公式将值带入矩阵的对应位置形成最终的旋转矩阵,成为最终的变换矩阵ALL,将ALL左乘须变换矩阵V1,最终得到变换后的图形矩阵V。function change3(S1,V1) S=0 0 0 0;0 0 0 0;0 0 0 0;0 0 0 1; S(1,1)=S1(1); S(2,2)=S1(2); S(3,3)=S1(3); ALL=S V2=ALL*V1;V=V2;将S设为缩放变换矩阵,然后对应公式将缩放的值带入矩阵的对应位置形成最终的平移矩阵,成为最终的变换矩阵ALL,将ALL左乘须变换矩阵V1,最终得到变换后的图形矩阵V。四、结果分析绘制直线、圆、椭圆、抛物线 直线 l
10、ine(1 2,2 1) 圆 circle(2 3,2) 椭圆 tuocircle(30,0.7) 抛物线根据三个点画出抛物线: parabola(1 2,5 6,3 9)根据函数画抛物线:4.2 图形的平移 showCubic(0,0,1,1;1,0,1,1;1,1,1,1;0,1,1,1;0,0,0,1;1,0,0,1;1,1,0,1;0,1,0,1) change(4,5,6,0,0,1,1;1,0,1,1;1,1,1,1;0,1,1,1;0,0,0,1;1,0,0,1;1,1,0,1;0,1,0,1)平移矩阵:最终总变换矩阵:变换后的矩阵: 图形的旋转 showCubic(0,0,1,
11、1;1,0,1,1;1,1,1,1;0,1,1,1;0,0,0,1;1,0,0,1;1,1,0,1;0,1,0,1) change2(pi/3,0,0,1,1;1,0,1,1;1,1,1,1;0,1,1,1;0,0,0,1;1,0,0,1;1,1,0,1;0,1,0,1)旋转矩阵:最终变换矩阵:变换后的矩阵:4.4 图形的缩放 showCubic(0,0,1,1;1,0,1,1;1,1,1,1;0,1,1,1;0,0,0,1;1,0,0,1;1,1,0,1;0,1,0,1) change3(0.8,0.5,0.3,0,0,1,1;1,0,1,1;1,1,1,1;0,1,1,1;0,0,0,1;
12、1,0,0,1;1,1,0,1;0,1,0,1)缩放矩阵:最终变换矩阵:变换后矩阵:缩放前图形:缩放后图形:五、总 结这次的课程设计主要是运用软件matlb来实现的。这次对简单图形的绘制,如:直线、抛物线、圆、椭圆等,还有对图形进行平移、旋转、缩放操作。简单图形的绘制,主要是通过编写matlab命令来实现,对于平移、旋转、缩放主要是对应的矩阵要是四维的,然后对应矩阵的分量调整好,再按照倒序相乘,得出变换矩阵,最后与原来的图形矩阵相乘后得出新的矩阵。所以这次的课程设计是按照书上的算法步骤先求出矩阵,然后求出变换后的图像的矩阵,因为需要变成其次坐标,所以需要添加一个最后的分量1,这样各种矩阵的运算
13、才可以实现。刚开始对这个地方不懂,编程出现了很多错误。对于题目要求:在图形显示中,使用鼠标、键盘或下拉菜单等方式进行交互控制。这个地方,我们通过在matlab调用命令来实现对图形的平移、旋转、缩放等操作。六、课程设计心得体会这个学期学了计算机图形学后,对我们有了很多帮助。老师讲解的非常详细,也举了很多生动的例子。所以对图形学的研究内容、应用、发展简历等。平时也通过课内实验对所学的内容通过编程实现各个功能,这让我们积累了一定的编程能力,同时对matlab也能更好的运用。本课程主要内容包括直线、圆、椭圆、抛物线等简单图形的绘制;交互的对简单图形进行平行;能够交互式的对简单图形进行旋转。这次对图形进
14、行平移、旋转、缩放的操作,主要是对应的矩阵要是四维的,然后对应矩阵的分量调整好,再按照倒序相乘,得出变换矩阵,最后与原来的图形矩阵相乘后得出新的矩阵。通过这次的课程设计,使我们的自学能力与动手实践能力得到相当大的提高,编程并不是靠看书本就能学会的,而是要靠一步步的调试一条条指令的修改试运行中学习进步的,盲目的看书并不能提高自己水平。这次的课程设计就是按照书上的步骤求矩阵,然后求出变换后的图像的矩阵,因为需要变成其次坐标,所以需要添加一个最后的分量1,这样各种矩阵的运算才可以实现。在本次的课设中让我们对计算机图形学有了一个更加深我们对计算机图形学课程理论知识的认识和理解,使我找到了理论与实践的最
15、佳结合点。以前可能只是简单的了解记住课本一些原理,通过自己编写程序将理论付诸实践后。那些知识更加使我真正明白并深记着,尤其能找到一些以前会忽略的细节。在运用matlab编写程序的时候,首先对图形的旋转、平移、缩放的原理有了深入的学习和认识,然后,在编写程序的时候从分考虑算法,用最简单的方法实现题目要求。题目中要求交互式的实现功能,但是我们直接运用matlab用命令实现了题目要求。通过这次课程设计,我们学会了团队合作,也更加明白了团队合作的效率和意义,让我们认识到一起学习并完成一项任务的意义。从这次的课程设计我们知道了自己的不足,学习的知识不够充分,对于现有资源材料的利用学习率太低等方面的缺点,
16、对今后的学习和工作进步都有非常大的帮助。参考文献1倪明田,吴良芝.计算机图形学M北京:北京大学出版社,1999.2孔令德. 计算机图形学课程设计教程M北京:北京大学出版社,2010.3白建军OpenGL三维图形设计与制作M北京:人民邮电出版社,1998.源程序1绘制直线function line(A,B)plot(A,B)2绘制圆function circle(R)alpha=0:pi/50:2*pi;%角度0,2*pi %R=2;%半径 x=R*cos(alpha); y=R*sin(alpha); plot(x,y,-) axis equal3绘制椭圆function tuocircle(
17、a,b)t=0:pi/20:2*pi; x=a*cos(t); y=b*sin(t); plot(x,y)4根据三点绘制抛物线function parabola(A,B,C)%A=1 2; %B=5 6; %C=3 9; x=A(1) B(1) C(1); y=A(2) B(2) C(2); %y=ax2+b p=polyfit(x,y,2); t=-10:.1:10;%指定绘图区间 s=polyval(p,t); plot(t,s,x,y,or)5根据函数绘制抛物线x=0:0.1:10;y=3*x.2plot(x,y)6图形的平移变换function change(T1,V1) T=1 0
18、0 0;0 1 0 0;0 0 1 0;0 0 0 1; T(1,4)=T1(1); T(2,4)=T1(2); T(3,4)=T1(3); T %平移 ALL=T %最后的变换矩阵 V2=ALL*V1; V=V2; V %变换后的图形矩阵,下面画图 face = V(1:4,:); %1,2,3,4 fill3(face(:,1),face(:,2),face(:,3),r); hold on; face = V(5:8,:); %5,6,7,8 fill3(face(:,1),face(:,2),face(:,3),b); hold on; face = V(2:3,:); V(7,:);
19、V(6,:) %2,3,7,6 fill3(face(:,1),face(:,2),face(:,3),g); hold on; face = V(1,:);V(4,:);V(8,:);V(5,:); %1,4,8,5 fill3(face(:,1),face(:,2),face(:,3),y); hold on; face = V(7:8,:); V(4,:);V(3,:) %4,3,7,8 fill3(face(:,1),face(:,2),face(:,3),b); hold on; face = V(1,:);V(2,:);V(6,:);V(5,:); %1,2,6,5 fill3(f
20、ace(:,1),face(:,2),face(:,3),r); axis equal7图形的旋转变换function change2(R1,V1) R=0 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1; sina=sin(R1); cosa=cos(R1); R(1,1)=cosa; R(1,2)=-sina; R(2,1)=sina; R(2,2)=cosa; R %旋转 ALL=R %最后的变换矩阵 V2=ALL*V1; V=V2; V %变换后的图形矩阵,下面画图 face = V(1:4,:); %1,2,3,4 fill3(face(:,1),face(:,2),fa
21、ce(:,3),r); hold on; face = V(5:8,:); %5,6,7,8 fill3(face(:,1),face(:,2),face(:,3),b); hold on; face = V(2:3,:); V(7,:);V(6,:) %2,3,7,6 fill3(face(:,1),face(:,2),face(:,3),g); hold on; face = V(1,:);V(4,:);V(8,:);V(5,:); %1,4,8,5 fill3(face(:,1),face(:,2),face(:,3),y); hold on; face = V(7:8,:); V(4,
22、:);V(3,:) %4,3,7,8 fill3(face(:,1),face(:,2),face(:,3),b); hold on; face = V(1,:);V(2,:);V(6,:);V(5,:); %1,2,6,5 fill3(face(:,1),face(:,2),face(:,3),r); axis equal8图形的缩放变换function change3(S1,V1) S=0 0 0 0;0 0 0 0;0 0 0 0;0 0 0 1; S(1,1)=S1(1); S(2,2)=S1(2); S(3,3)=S1(3); S %缩放 ALL=S %最后的变换矩阵 V2=ALL*
23、V1; V=V2; V %变换后的图形矩阵,下面画图 face = V(1:4,:); %1,2,3,4 fill3(face(:,1),face(:,2),face(:,3),r); hold on; face = V(5:8,:); %5,6,7,8 fill3(face(:,1),face(:,2),face(:,3),b); hold on; face = V(2:3,:); V(7,:);V(6,:) %2,3,7,6 fill3(face(:,1),face(:,2),face(:,3),g); hold on; face = V(1,:);V(4,:);V(8,:);V(5,:); %1,4,8,5 fill3(face(:,1),face(:,2),face(:,3),y); hold on; face = V(7:8,:); V(4,:);V(3,:) %4,3,7,8 fill3(face(:,1),face(:,2),face(:,3),b); hold on; face = V(1,:);V(2,:);V(6,:);V(5,:); %1,2,6,5 fill3(face(:,1),face(:,2),face(:,3),r); axis equ
限制150内