计算机图形学matlab实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
姓名:_刘奔__________ 学号: 20124223 学院: 理学院
专业班级: 地理信息系统一班
论文标题: 计算机图形学实验报告
2014年6月25日
Matlab绘图实验
一、实验目的:
1、掌握MATLAB的基本绘图函数。
2、掌握绘图函数的用法、简单图形标注、简单颜色设定。
二、实验要求:
独立进行实验,完成实验报告。
三、实验内容:
1、MATLAB简介:MATLAB语言丰富的图形表现方法,使得数学计算结果可以方便地、多样性地实现了可视化,这是其它语言所不能比拟的。
2、MATLAB的绘图功能:
(1)二维绘图:
A、plot——最基本的二维图形指令:1. 单窗口单
曲线绘图;2. 单窗口多曲线绘图;3. 单窗口多曲线分图绘图;4. 多窗口绘图;5.可任意设置颜色与线型;6.图形加注功能;7.fplot——绘制函数
图函数;8.ezplot ——符号函数的简易绘图函数 B 、fill ——基本二维绘图函数:绘制二维多边形并填充颜色
(2) 三维绘图:
A 、三维线图:plot3——基本的三维图形指令
B 、三维网格图:mesh ——三维网线绘图函数
C 、三维表面图:surf ——三维曲面绘图函数,与网格图看起来一样 四、作业:
1、(1)在同一幅图上的(-pi ,pi )区间,用0.5的间隔绘制sinx 的红色曲线,用0.1的间隔绘制sin(x+0.5)的绿色曲线,用0.01的间隔绘制sin(x+1)的蓝色曲线。
(2)给图的x 和y 轴添加标注。
2、在[-2*pi,pi]区间以0.1的间隔绘制5cos(x.^2+1)的曲线。
3、编辑M 文件,实现函数4xexp (-(x.^2+y.^2))的各种图形,包括三维线性图、网眼图、曲面图,并对他们分别加图题和标注坐标轴
4、编辑M 文件,实现函数
22()
(,)(cos6cos6)
x y f x y e
x y -+=+
的各种图形,包括三维线形图、网眼图、表面图、轮廓图、混合图,并对它们分别加图题和标注坐标轴。
五、实验内容
1、(1)在同一幅图上的(-pi,pi)区间,用0.5的间隔绘制sinx的红色曲线,用0.1的间隔绘制sin(x+0.5)的绿色曲线,用0.01的间隔绘制sin(x+1)的蓝色曲线。
(2)给图的x和y轴添加标注。
程序:
x1=-pi:0.5:pi
y1=sin(x1);
x2=-pi:0.1:pi
y2=sin(x2+0.5); x3=-pi:0.01:pi y3=sin(x3+1);
plot(x1,y1,'r',x2,y2,'g',x3,y3,'b') xlabel('x1,x2,x3')
ylabel('sin(x1),sin(x2+0.5),sin(x3+1)')
2、在[-2*pi,pi]区间以0.1的间隔绘制5cos(x.^2+1)的曲线。
程序:
x=-2*pi:0.1:pi
y=5*cos(x.^2+1);
title('y=5cos(x.^2+1)') plot(x,y)
六、实验体会
这次实验学习matlab软件的绘图功能:二维绘图、三维绘图;matlab软件还有丰富的图形修饰功能,如改变线条的形式和颜色;除此之外其还可以以多种形式如在一个图形中显示多个函数图形,一个fig ure中显示多个坐标系。
总的而言matlab是一款十分有用的绘图软件。
实验中遇到的困难就是指令比较多,格式刚刚开始接触觉得陌生,相信多做练习一定能掌握这个软件的使用要领。
DDA实验报告
一、实验目的
对画线函数有个基本的了解
实现网格的绘制和网格像素的填充
熟练掌握DDA算法的实现过程
二、实验内容
(1)实现DDA直线生成算法
(2)直线段起始点和终点坐标为(0,0)、(6,4);
(3)采用不同的彩色显示两种算法生成的直线结果,并与MFC绘制的直线结果进行对比分析;
三、实验结果
为了方便比较,我画了三条线,其中黑线是两点确定的直线,红色是DDA算法填充网格像素的效果.
四、实验分析和总结
1、实验分析
首先要明确DDA算法的原理。
对于DDA算法,按照像素划分,计算每个区间但纵坐标之间的关系,对下一个纵坐标数值进行取整,为了方便查找像素像素点(DDA的优点就在于它的复杂度只有加法和取整两点)。
2、实验总结
在真正实验中,用网格表示像素,而为了便于观看,网格单位距离要大于1,所以对于DDA算法来说像素区间大小大于1(我是以4为例).另外,因为是用网格表示像素,所以每个点的描绘都是填充网格,函数CRect rect(x0,y0,x1,y) dc.FillRect(&rect,&brush)实现网格的填充,用到的是对角的两点坐标,所以在求点时,要明确要画的点显示在网格上对应的是哪个格子,算法要怎么才能找到该格子的对角。
五、源代码
Function DDA(x1,x2,y1,y2)
Length=abs(x2-x1);
If Length<abs(x2-x1);
Length=abs(y2-y1);
End
Dx=(x2-x1)/length;
Dy=(y2-y1)/length;
X=x1;
Y=y1;
Hold on
Plot(round(x),round(y),r);
X=x+dx;
Y=y+dy;
Plot(round(x),round(y),r);
End
Hold off
End
六、实验体会
这次实验学习matlab的DDA算法,让我知道如何使用数值分析法来实现直线的除此之外其还可以以多种形式如在一个图形中显扫描。
实验中遇到的困难就是指令比较多,格式刚刚开始接触觉得陌生,相信多做练习一定能掌握这个软件的使用要领。
直线bresenham算法
一、实验目的
对画线函数有个基本的了解
实现网格的绘制和网格像素的填充
熟练掌握Bresenham算法的实现过程
二、实验内容
(1)实现Bresenham直线生成算法
(2)直线段起始点和终点坐标为(0,0)、(6,4);
(3)采用不同的彩色显示两种算法生成的直线结果,并与MFC绘制的直线
结果进行对比分析;
三、实验结果
为了方便比较,我画了三条线,其中黑线是两点确定的直线,蓝色是Bresenham 网格表示像素的效果
四、实验分析和总结
1、实验分析
首先要明确Bresenham算法的原理。
对于Bresenham算法,从给定线段的左端点开始,逐步处理每个后继列,并在其扫描线y值最接近线段的像素上绘出一点。
2、实验总结
在真正实验中,用网格表示像素,而为了便于观看,网格单位距离要大于1,所以Bresenham算法的后继列也是以4为单位的,那么在去点时就要另外注意,不可掉以轻心,特别是在Bresenham 算法求Pk时。
另外,因为是用网格表示像素,
所以每个点的描绘都是填充网格,函数CRect rect(x0,y0,x1,y)
dc.FillRect(&rect,&brush)实现网格的填充,用到的是对角的两点坐标,所以在求点时,要明确要画的点显示在网格上对应的是哪个格子,算法要怎么才能找到该格子的对角。
五、源代码
Function bresenham_line(x0,x1,y1,y0)
K=(y1-y0)/(x1-x0);
D=0.5-k;
Delta1=-k;
Delta2=1-k;
X=x0;
Y=y0;
Hold on
Plot(x,y,”ro”);
While x<x1
If d<0
X=x+1;
Y=y+1;
D=d+delta2;
Else
X=x+1;
D=d+delta1;
End
Plot(x,y,”r0”);
End
Hold off
End
六、实验体会
这次实验学习matlab的bresenham算法,让我知道如何使用besenham来实现直线的扫描变换。
实验中遇到的困难就是指令比较多,格式刚刚开始接触觉得陌生,相信多做练习一定能掌握这个软件的使用要领。
二维几何变换
实验目的
1. 了解几何变换的基本概念。
2. 了解平移、伸缩、对称、旋转等变换。
3. 学习掌握MATLAB 软件有关的命令。
实验内容
将函数2
x e y -=的图形向右平移3个单位。
实验原理
1.几何变换程的基本概念
在平面直角坐标系下,点A 由坐标),(y x 表示,如果存在两个函数
),('),,('21y x f y y x f x ==
将点),(y x A 映射成点),('y x A ,则称函数21,f f 确定了一个平面上的几何变换T 。
如果能从上面的方程组中反解出),(y x :
)','(),','(21y x g y y x g x ==
则称函数21,g g 确定了T 的逆变换1-T 。
2.几种常见的几何变换
常见的平面图形的几何变换有平移、伸缩、对称、旋转等变换。
平移变换:把函数)(x f y =变化为)(a x f y +=,可将函数图形向右平移a 个单位,把函数)(x f y =变化为))(a x f y +=,可将函数图形向上平移a 个单位,
伸缩变换:把函数)(x f y =变化为)(sx f y =,函数图形会压缩或伸长,其作是改变水平轴的刻度单位,因此s 称为水平刻度参数,把函数)(x f y =变化为)(x sf y =,则可改变垂直轴的刻度单位。
旋转变换:设函数图形以原点为中心,逆时针旋转θ角,原来的坐标),(y x 变为新的坐标),(Y X ,旋转变换为
⎩⎨
⎧+=-=θ
θθ
θcos sin sin cos y x Y y x X 对称变换:把函数)(x f y =变化为)(x f y --=,函数图形关于原点对称;把
函数)(x f y =变化为)(x f y -=,函数图形关于y 轴对称;把函数)(x f y =变化为)(x f y -=,函数图形关于x 轴对称。
3.几何变换的矩阵表示
平移变换、缩放变化、旋转变换、对称变换可以写成如下统一的形式:
⎩⎨
⎧=+=++=2
22211
1211b y b x a Y b y a x a X 上式可写为如下矩阵表示形式
⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦
⎤
⎢⎢⎢⎣⎡=⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡10
,11222
21
11211
b a a b a a A y x A Y X 对于平移量为),(m l 的平移,对应的矩阵为⎥⎥
⎥⎦⎤⎢⎢⎢⎣⎡=1001001m l A ; 以原点为中心,逆时针旋转θ角的变换,对应的矩阵为⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡-=10
00cos sin 0sin cos θ
θ
θθ
A ; 比例系数为t s ,的缩放,对应的矩阵为⎥⎥
⎥⎦
⎤
⎢⎢⎢⎣⎡=1000000t s A ; 关于x 轴对称的变换,对应的矩阵为⎥⎥
⎥⎦⎤
⎢⎢⎢⎣⎡-=100010001A ; 关于y 轴对称的变换,对应的矩阵为⎥⎥
⎥⎦⎤
⎢⎢⎢⎣⎡-=100010001A ; 关于直线x y =对称的变换,对应的矩阵为⎥⎥⎥⎦
⎤
⎢⎢⎢⎣⎡=100001010A 。
实验方法
平移变换
将函数2
x e
y -=的图形向右平移3个单位,然后向左平移3个单位.
相应的MA TLAB 代码为:
>>clear; close;
>>x=-2:0.1:2;y=exp(-x.^2); >>x1=x-3; %图形向左平移3个单位; >>x2=x+3; %图形向右平移3个单位; >>plot(x,y,x1,y,':',x2,y,'-.'); >>xlabel('x'); ylabel('y');
结果见图8.1
-5
-4
-3
-2
-1
01
2
3
4
5
00.10.20.30.40.50.60.70.80.91x
y
图8.1 函数图形平移
如果是向上或向下平移3个单位, 相应的MA TLAB 代码为:
>>clear; close;
>>x=-2:0.1:2;y=exp(-x.^2); >>y1=y+3; %图形向上平移3个单位; >>y2=y-3; %图形向下平移3个单位; >>plot(x,y,x,y1,':',x,y2,'-.'); >>xlabel('x'); ylabel('y');
结果见图8.2
-2
02
-3
-2-101
2
3
4
x
y
图8.2 函数图形平移
练习2 将练习1中的图形2
x e y -=在水平方向上进行伸缩.即作函数2
2x
s e y -=的图形,
分别取2,1,5.0=s 绘图, 相应的MA TLAB 代码为:
>>clear; close;
>>x=-2:0.1:2;y=exp(-x.^2); >>x1=x*0.5; %图形压缩
>>x2=x*2; %图形放大
>>plot(x,y,x1,y,':',x2,y,'-.'); >>xlabel('x'); ylabel('y');
结果见图8.3
-4
-3
-2
-1
01
2
3
4
00.10.20.30.40.50.60.70.80.91x
y
图8.3 函数图形缩放
如果在垂直方向上进行伸缩,则作函数2
x se y -=的图形,分别取2,1,5.0=s 绘图, 相应的MATLAB 代码为:
>>clear; close;
>>x=-2:0.1:2;y=exp(-x.^2); >>y1=y*0.5; %图形压缩 >>y2=y*2; %图形放大
>>plot(x,y,x,y1,':',x,y2,'-.'); >>xlabel('x'); ylabel('y');
结果见图8.4
-2
-1.5
-1
-0.5
00.5
1
1.5
2
00.20.40.60.811.21.41.61.82x
y
图8.4 函数图形缩放
练习3 将函数2x y 的图形以原点为中心,逆时针旋转30度角. 相应的MA TLAB 代码为:
>>clear; close; >>x=-2:0.1:2;y=x.^2;
>>x1=x*cos(pi/6)-y*sin(pi/6); >>y1=x*sin(pi/6)+y*cos(pi/6); >>plot(x,y,x1,y1,’:’);
>>xlabel('x'); ylabel('y');
结果见图8.5
-4
-3
-2
-10
1
2
-0.5
00.511.522.533.544.5x
y
实验总结
1 通过这次实验,我熟悉的掌握了平面二维几何变换。
2 并能够通过MATLAB 实现程序的运行。