《计算机图形学》课程设计报告学生姓名:学号:学院:班级:题目: 简单图形的绘制职称2015年7月1日目录目录 (I)一、选题背景 (1)二、算法设计 (2)2.1 绘制直线、圆、椭圆、抛物线 (2)2.1.1 绘制直线 (2)2.1.2 绘制圆 (2)2.1.3 绘制椭圆 (2)2.1.4 绘制抛物线 (2)2.2 三维几何变换 (2)三、程序及功能说明 (5)3.1 绘制直线、圆、椭圆、抛物线...... (5)3.1.1 绘制直线 (5)3.1.2 绘制圆 (5)3.1.3 绘制椭圆 (5)3.1.4 绘制抛物线 (6)3.2 图形的平移 (6)3.3 图形的旋转 (6)3.4 图形的缩放 (7)四、结果分析 (7)4.1 绘制直线、圆、椭圆、抛物线 (7)4.1.1 直线 (7)4.1.2 圆 (8)4.1.3 椭圆 (8)4.1.4 抛物线 (8)4.2 图形的平移 (9)4.3 图形的旋转 (10)4.4 图形的缩放 (11)五、总结 (10)六、课程设计心得体会 (14)参考文献 (15)源程序 (16)一、选题背景二、算法设计2.1 绘制直线、圆、椭圆、抛物线2.1.1 绘制直线通过两个点的坐标来绘制直线。
计算机图形学中二维图形在显示输出之前需要扫描转换,生成直线的算法一般有DDA 算法和中点算法。
2.1.2 绘制圆通过运用圆的参数方程cos ;sin x a r y b r θθ=+=+来绘制圆的图形,其中[0,2]θπ∈,(a,b )为圆心,r 为半径,运用参数方程,只需要确定半径的长度和圆心的位置,即可绘制出圆。
2.1.3 绘制椭圆通过运用椭圆的参数方程cos ;sin x a y b θθ==来绘制椭圆的图形,其中[0,2]θπ∈,是已知的变量,a ,b 分别为长半轴,短半轴,当确定a 和b 后,通过参数方程即可得到这个椭圆的方程。
2.1.4 绘制抛物线根据点绘制抛物线图像是通过拟合完成,根据三个点的坐标,通过数据拟合,得到经过这三个点的函数关系式,从而再根据这个函数关系式绘制出抛物线上其他的点,形成一条连续的抛物线;或直接根据已知函数绘制图像是通过已知函数画出图像。
2.2 三维几何变换三维几何变换是二维几何变换的推广。
二维几何变换在齐次坐标空间中可用3⨯3的变换矩阵表示,类似的,三维几何变换在齐次坐标空间中可用4⨯4的变换矩阵表示。
三维空间中的点(),,x y z 的齐次坐标定义为(),,h h h x y z ,其中,h 为不等与零的任意常数,h x hx =,h y hy =,h z hz =。
亦即点(),,x y z 对应4维齐次坐标空间的一条直线:h hh h x hx y hy z hz w hy=⎧⎪=⎪⎨=⎪⎪=⎩ (2.2.1)通常为了简单起见,取(),,,1x y z 为(),,x y z 的齐次坐标。
(1)平移变换平移变换将点(),,P x y z 在三个坐标轴方向上分别移动距离,,x y z t t t ,得到新的一点(),,P x y z '''',它们之间的关系表示为:P P T '=+,其中,,Tx y z T t t t ⎡⎤=⎣⎦。
三维平移变换在其次坐标下的矩阵表示为:(),,1000100010001x y z x y t t t z t t T t ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦(2.2.2) (2)放缩变换三维放缩变换在齐次坐标下的矩阵表示:(),,00000000001x y z x y s s s z s s S s ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦(2.2.3) 此变换的参照点为坐标原点,我们可以按下面步骤建立关于空间任一参照点(),,r r r r P x y z 的缩放变换:(1)平移使r P 落于原点,变换为(),,r r r T x y z --; (2)进行放缩变换(),,x y z S s s s ;(3)平移r P 回到原先的位置,变换为(),,r r r T x y z 。
从而关于参照点r P 的缩放变换();,,r r r r S P x y z 为()()()();,,,,,,,,r r r r r r r x y z r r r S P x y z T x y z S s s s T x y z =-- (2.2.4) (3)旋转变换给定一点(),,P x y z ,首先将P 点y 和z 坐标表示成极坐标,即()(),,,cos ,sin x y z x r r ϕϕ=,其中r =。
将P 点绕x 轴旋转θ角后,得到(),,P x y z ''''。
易知:()()cos sin x x y r z r ϕθϕθ⎧'=⎪'=+⎨⎪'=+⎩ (2.2.5)上式矩阵形式为:1000cos sin 0sin cos x x y y z z θθθθ'⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥'=-⎢⎥⎢⎥⎢⎥'⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦ (2.2.6)从而绕x 轴旋转θ角的变换在齐次坐标下的矩阵表示为:()10000cos sin 00cos sin 00001x R θθθθθ⎡⎤⎢⎥-⎢⎥=⎢⎥⎢⎥⎣⎦(2.2.7) 类似的,绕y 轴和z 轴的旋转θ的变换矩阵分别为:()cos 0sin 00100sin 0cos 001y R θθθθθ-⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦(2.2.8) ()cos sin 00sin cos 000010001z R θθθθθ-⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦(2.2.9) 如果要绕空间任意轴01P P →旋转θ角,可按如下步骤实现:(1)以0P 为原点O ,01P P →为Oz 轴建立新的坐标系Ox yz ;(2)求出从坐标系Oxyz 到坐标系Ox yz 的变换M ;(3)将图形对象变换到坐标系Ox yz 中;(4)在新坐标系Ox yz 中绕Oz 轴旋转θ角,变换为()z R θ; (5)将图形对象变换为原坐标系Oxyz 中,变换为1M -。
这样绕01P P →旋转θ角的变换为:()1z M R M θ- (2.2.10)三、程序及功能说明3.1 绘制直线、圆、椭圆、抛物线……3.1.1 绘制直线plot(A,B)通过运用matlab 中的plot 函数画出两点之间的直线图像。
其中A,B 为直线上的两个点的坐标,通过两点绘制直线。
3.1.2 绘制圆function circle(A,R) alpha=0:pi/50:2*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 ,带入公式求得圆上的点的坐标,再绘制出图像。
3.1.3 绘制椭圆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 完善参数方程求得椭圆上的点的坐标,再绘制出图像。
3.1.4 绘制抛物线function parabola(A,B,C)x=[A(1) B(1) C(1)]; y=[A(2) B(2) C(2)];%y=ax^2+bp=polyfit(x,y,2);t=-10:.1:10;%指定绘图区间s=polyval(p,t);plot(t,s,x,y,'or')通过三个点绘制抛物线是通过三点的拟合绘制出图像;通过函数是在一个区间上画出函数图像。
3.2 图形的平移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=T%最后的变换矩阵V2=ALL*V1';V=V2;先设T为平移变换矩阵,然后通过带入平移的长度,形成最终的平移矩阵,成为最重的变换举证ALL,将ALL左乘须变换矩阵V1,最终得到变换后的图形矩阵V。
3.3图形的旋转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和cosa值,然后对应公式将值带入矩阵的对应位置形成最终的旋转矩阵,成为最终的变换矩阵ALL,将ALL左乘须变换矩阵V1,最终得到变换后的图形矩阵V。
3.4图形的缩放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=SV2=ALL*V1';V=V2;将S设为缩放变换矩阵,然后对应公式将缩放的值带入矩阵的对应位置形成最终的平移矩阵,成为最终的变换矩阵ALL,将ALL左乘须变换矩阵V1,最终得到变换后的图形矩阵V。
四、结果分析4.1绘制直线、圆、椭圆、抛物线4.1.1 直线>> line([1 2],[2 1])4.1.2 圆>> circle([2 3],2)4.1.3 椭圆>> tuocircle(30,0.7)4.1.4 抛物线根据三个点画出抛物线:>> 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])平移矩阵:1004010500160001T ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦最终总变换矩阵:1004010500160001ALL ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦变换后的矩阵:45715571567146714561556156614661V ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦4.3 图形的旋转>> 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]) >> 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])旋转矩阵:0.50000.8660000.86600.50000000 1.00000000 1.0000R -⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦ 最终变换矩阵:0.50000.8660000.86600.50000000 1.00000000 1.0000ALL -⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦ 变换后的矩阵:0 1.0000 1.00000.50000.8660 1.0000 1.00000.3660 1.3660 1.0000 1.00000.86600.5000 1.0000 1.0000000.0000 1.00000.50000.86600.0000 1.00000.3660 1.36600.0000 1.00000.86600.50000.0000 1.0000V ⎡⎤⎢⎥⎢⎥⎢⎥-⎢⎥-⎢⎥=⎢⎥⎢⎥⎢⎢-⎢-⎢⎣⎦⎥⎥⎥⎥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;1,0,0,1;1,1,0,1;0,1,0,1])缩放矩阵:0.800000000.500000000.30000000 1.0000S ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦ 最终变换矩阵:0.800000000.500000000.30000000 1.0000ALL ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦变换后矩阵:000.3000 1.00000.800000.3000 1.00000.80000.50000.3000 1.000000.50000.3000 1.0000000.0000 1.00000.800000.0000 1.00000.80000.50000.0000 1.000000.50000.0000 1.0000V ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦缩放前图形:缩放后图形:五、总结这次的课程设计主要是运用软件matlb来实现的。