matlab二维几何变换
matlab图像的几何变换

实验三 图像的几何运算一、实验目的1、 理解几何运算的基本概念与定义;2、 掌握在MA TLAB 中进行插值的方法3、 运用MATLAB 语言进行图像的插值缩放和插值旋转。
二、实验原理插值是常用的数学运算,通常是利用曲线拟合的方法,通过离散的采样点建立一个连续函数来逼近真实的曲线,用这个重建的函数便可以求出任意位置的函数值。
最近邻插值是最简便的插值,在这种算法中,每一个插值输出像素的值就是在输入图像中与其最临近的采样点的值。
该算法的数学表示为:()()k f x f x = 如果1111()()22k k k k x x x x x -++<<+ 最近邻插值是工具箱函数默认使用的插值方法,而且这种插值方法的运算量非常小。
不过,当图像中包含像素之间灰度级变化的细微结构时,最近邻插值法会在图像中产生人工的痕迹。
双线性插值法的输出像素值是它在输入图像中2×2领域采样点的平均值,它根据某像素周围4个像素的灰度值在水平和垂直两个方向上对其插值。
设''''1,1,,m i m n j n a i m b j n <<+<<+=-=-,'i 和'j 是要插值点的坐标,则双线性插值的公式为:''(,)(1)(1)(,)(1)(1,)(1)(,1)(1,1)g i j a b g m n a b g m n a bg m n abg m n =--+-++-++++ 双三次插值的插值核为三次函数,其插值邻域的大小为4×4。
它的插值效果比较好,但相应的计算量也比较大,在这里不做讨论。
1、图像的缩放imresize 函数的语法格式为:B = imresize(A, m, method)2、图像的旋转imrotate 的语法格式为:B = imrotate(A, angle, method)三、实验内容及要求1. 读出girl.bmp 图像并显示。
二维几何变换代码-MATLAB

二维几何变换代码-MATLAB二、二维几何变换%c6_Test.m文件,这是主文件clearall;clc;%Main();Menu();%Menu.m文件,主界面函数% function Menu()%程序主界面函数%初始化图形数据矩阵为空Figure=[];setappdata(0,'FigureData',Figure);%主界面布局leftbase=10;bottombase=-50;scrsz = get(0,'ScreenSize');figure('Position',[scrsz(3)/3 scrsz(4)/6scrsz(3)/3 scrsz(4)*2/3]);%figure();uicontrol('Style','pushbutton','string','查看原图','position',[150+leftba se 500+bottombase 100 50],...'callback','show_callback');uicontrol('Style','pushbutton','string','导入图形','P osition',[150+leftbase 430+bottombase10050],...'Callback','input_callback');uicontrol('Style','pushbutton','string','平移变换','Position',[150+leftbase 360+bottombase10050],...'Callback','translation_callback');uicontrol('Style','pushbutton','string','比例变换','Position',[150+leftbase290+b ottombase100 50],...'Callback','proportion_callback');uicontrol('Style','pushbutton','string','旋转变换','Position',[150+leftbase 220+bottombase 10050],...'Callback','rotation_callback');uicontrol('Style','pushbutton','string','错切变换','Position',[150+leftb ase 150+bottombase100 50],...'Callback','shear_callback');uicontrol('Style','popup','string','关于x轴对称|关于y轴对称|关于原点对称|关于y=x对称|关于y=-x对称',...'Position',[150+leftbase80+bottombase10050],'callback',@mirror _callback);%set(duichen,'Callback',{@mirror_callback,duiche n});end%show_callback.m文件function show_callback(hObj,event)%显示原始图形回调函数Figure=getappdata(0,'FigureData');ifisempty(Figure)errordlg('未导入图形顶点数据','errordialogue');return ;end%获取图形内部点坐标矩阵%fill=[];ET=Create_ET(Figure);fill=Fill(ET);DrawFigure(Figure,fill,'原图');end%input_callback.m文件functioninput_callback()%输入图形数据矩阵回调函数Figure=GetFigure();if~isempty(Figure)setappdata(0,'FigureData',Figure);msgbox('图形数据输入成功!','提示对话框');elseerrordlg('导入的数据为空','警告信息!');endend%translation_callback.m文件function translation_callback(hObj,event)%平移变换回调事件Figure=getappdata(0,'FigureData');ifisempty(Figure)errordlg('未导入图形顶点数据','error dialogue');return;endprompt={'输入x方向的增量','输入y方向的增量'};%设置提示字符串title='输入平移增量';%设置标题numline=1;%指定输入数据行数defdata={'0','0'};%指定数据的默认值Resize='on';%设置对话框大小为可调节的answer=inputdlg(prompt,title,numline,defdata,Resize);%将输入的cell类型数据转换为整数data=str2num(char(answer));%检测用户是否点击了取消按钮iflength(data)<2return;end%读取图形顶点坐标Point=Figure(:,[2,3]);%进行平移变换Point=TranslationTransformation(Point,data);%构造平移变换后的图形数据矩阵Figure(:,[2,3])=Point;%获取图形内部点坐标矩阵%fill=[];ET=Create_ET(Figure);fill=Fill(ET);%标题Thead=strcat('平移变换---X坐标增量:',num2str(data(1)),';Y坐标增量:',num2str(dat a(2)));%输出平移变换后的图形DrawFigure(Figure,fill,Thead);end%proportion_callback.m文件function proportion_callback(hObj,event)%比例变换回调函数Figure=getappdata(0,'FigureData');ifisempty(Figure)errordlg('未导入图形顶点数据','errordialogue');return;endprompt={'输入x方向的比例因子Sx','输入y方向的比例因子Sy','输入比例变换基点x 坐标','输入比例变换基点y坐标'};%设置提示字符串title='输入比例因子S';%设置标题numline=1;%指定输入数据行数defdata={'1','1','0','0'};%指定数据的默认值Resize='on';%设置对话框大小为可调节的answer=inputdlg(prompt,title,numline,defdata,Resize);%将输入的cell类型数据转换为整数data=str2num(char(answer));%检测用户是否点击了取消按钮if length(data)<4return ;end%读取图形顶点坐标Point=Figure(:,[2,3]);%size(Point)%size(Figure),data%进行比例变换Point=ProportionTransformation(Point,data([3,4]),data([1,2]));%size(Point)%构造比例变换后的图形数据矩阵Figure(:,[2,3])=Point;%获取比例变换后图形内部点坐标矩阵%fill=[];ET=Create_ET(Figure);fill=Fill(ET);%标题Thead=strcat('比例变换---Sx=',num2str(data(1)),';Sy=',num2str(data(2)),';比例变换基点坐标(',num2str(data(3)),',',num2str(data(4)),')');%绘制变换后图形DrawFigure(Figure,fill,Thead);end%rotation_callback.m文件functionrotation_callback(hObj,event)%旋转变换回调函数Figure=getappdata(0,'FigureData');if isempty(Figure)errordlg('未导入图形顶点数据','error dialogue');return ;endprompt={'输入旋转角度angle(度)','输入旋转变换基点x坐标','输入旋转变换基点y坐标'};%设置提示字符串title='输入旋转变换参数';%设置标题numline=1;%指定输入数据行数defdata={'0','0','0'};%指定数据的默认值Resize='on';%设置对话框大小为可调节的answer=inputdlg(prompt,title,numline,defdata,Resize);%将输入的cell类型数据转换为整数data=str2num(char(answer));%检测用户是否点击了取消按钮if length(data)<3return;end%读取图形顶点坐标Point=Figure(:,[2,3]);%进行旋转变换Point=RotateTransformation(Point,data([2,3]),data(1)*pi/180);%构造旋转变换后的图形数据矩阵Figure(:,[2,3])=Point;%获取旋转变换后图形内部点坐标矩阵%fill=[];ET=Create_ET(Figure);fill=Fill(ET);%标题Thead=strcat('旋转变换---旋转角度:',num2str(data(1)),'度;旋转基点坐标(',n um2str(data(2)),',',num2str(da ta(3)),')');%绘制旋转变换后的图形DrawFigure(Figure,fill,Thead);end%shear_callback.m文件function shear_callback(hObj,event)%错切变换回调函数Figure=getappdata(0,'FigureData');if isempty(Figure)errordlg('未导入图形顶点数据','error dialogue');return;endprompt={'输入错切变换参数b','输入错切变换参数c','输入错切变换基点x坐标','输入错切变换基点y坐标'};%设置提示字符串title='输入错切变换参数';%设置标题numline=1;%指定输入数据行数defdata={'0','0','0','0'};%指定数据的默认值Resize='on';%设置对话框大小为可调节的answer=inputdlg(prompt,title,numline,defdata,Resize);%将输入的cell类型数据转换为整数data=str2num(char(answer));%检测用户是否点击了取消按钮if length(data)<4return;end%读取图形顶点坐标Point=Figure(:,[2,3]);%进行错切变换Point=ShearTransformation(Point,data([3,4]),data ([1,2]));%构造错切变换后的图形数据矩阵Figure(:,[2,3])=Point;%获取错切变换后图形内部点坐标矩阵%fill=[];ET=Create_ET(Figure);fill=Fill(ET);%标题Thead=strcat('错切变换---错切参数:b=',num2str(data(1)),',c=',num2str(data(2)),';错切变换基点坐标(',num2str(data(3)),',',num2str(data(4)),')');%绘制变换后图形DrawFigure(Figure,fill,Thead);end%mirror_callback.m文件function mirror_callback(hObj,event)%对称变换回调函数FFigure=getappdata(0,'FigureData');Figure=FFigure;ifisempty(Figure)errordlg('未导入图形顶点数据','error dialogue');return;end%获取所选择的对称类型%heads=['关于x轴对称','关于y轴对称','关于原点对称','关于y=x对称','关于y=-x 对称','原始图形'];heads(1).title='关于x轴对称';heads(2).title='关于y轴对称';heads(3).title='关于原点对称';heads(4).title='关于y=x对称';heads(5).title='关于y=-x对称';heads(6).title='原始图形';%读取图形顶点坐标Point=Figure(:,[2,3]);%进行对称变换Point=MirrorTransformation(Point);%添加原始顶点坐标Point(length(Point)+1).data=FFigure(:,[2,3]);%构造对称变换后的图形数据矩阵figure('name','五中对称变换及原图对比图');for i=1:length(Point)NPoint=Point(i).data;Figure(:,[2,3])=NPoint;%获取对称变换后图形内部点坐标矩阵ET=Create_ET(Figure);fill=Fill(ET);subplot(2,3,i);hold on;[row,column]=size(fill);if column>=2scatter(fill(:,1),fill(:,2),'.','b');end[row,column]=size(Figure);for k=1:row%构造第一条边的起点和终点x坐标矩阵x=[Figure(Figure(k,4),2),Figure(Figure(k,5),2)]; y=[Figure(Figure(k,4),3),Figure(Figure(k,5),3)];plot(x,y,'-r','LineWidth',2);endhold off;title(heads(i).title);endend%DrawFigure.m文件,绘制图形function DrawFigure(num,fill,title)%绘制图形(通过绘制图形边界实现)%fill是图形内部的点坐标矩阵,第一列是x坐标,第二列是y坐标%title 是图形标题,字符串类型%num是图形数据矩阵,其每列定义如下:%点编号?点坐标x 点坐标y 线段起点编号?线段终点编号%依次绘制边figure('name',title);hold on;[row,column]=size(fill);if column>=2scatter(fill(:,1),fill(:,2),'.','b');end[row,column]=size(num);fori=1:row%构造第一条边的起点和终点x坐标矩阵x=[num(num(i,4),2),num(num(i,5),2)];y=[num(num(i,4),3),num(num(i,5),3)];plot(x,y,'-r','LineWidth',2);endhold off;%legend(title);end%GetFigure.m文件,获取图形数据,数据源为程序自带的*.xls文件。
MATLAB_-_05_-_二维数组及其应用_修改_

与二维数组相关的函数
cmax = max(A) rmax = max(A,[],2)
返回cmax为一个行数组,元素为A中每个列的最大值 返回rmax为一个列数组,元素为A中每个行的最大值
[cmax,index] = max(A)
[rmax,index] = max(A,[],2) max(A,B)
三维网格图: mesh, meshc, meshz
mesh(X,Y,Z,C) 绘制由矩阵 X,Y,Z 所确定的曲面网格图,矩阵 C 用于
确定网格颜色,省略时 C=Z
meshc(X,Y,Z,C) 调用方式与 mesh 相同,在 mesh 基础上增加等高线 meshz(X,Y,Z,C) 调用方式与 mesh 相同,在 mesh 基础上屏蔽边界面
对子数组A(r,c)进行赋值:B的“行、列” A(r,c) = B 必须与A(r,c)的“行、列”相同
二维数组的子数组 的寻访和赋值
使用“单下标”方式
A(:) A(s)
由A的各列按自左到右的次序,首尾相接而生成 的“一维长列”数组 引用A中由一维数组s指定的元素。s若是行(或 列),则A(s)就是长度相同的行(或列) 全元素赋值方式。结果:保持A的“行宽、列长” 不变。条件:A、D两个数组的总元素相等,但 “行宽、列长”不一定相同 对A的部分元素重新赋值。结果:保持A的“行 宽、列长”不变。条件:s单下标数组的长度必 须与“一维数组”B的长度相等,但是s、B不一 定同是“行数组”或“列数组”
返回A中每个列向量的平均值 返回A中每个行向量的平均值
median(A) 返回A中每个列向量的中值 Median(A,2) 返回A中每个行向量的中值
std(A) std(A,2)
返回A中每个列向量的标准差 返回A中每个行向量的标准差
MATLAB图形绘制-二维

MATLAB提供了一些绘图选项,用于确定所绘曲线的线型、 颜色和数据点标记符号。 例如,“b-.”表示蓝色点画线,“y:d”表示黄色虚线并用菱 形符标记数据点。当选项省略时,MATLAB规定,线型一 律用实线,颜色将根据曲线的先后顺序依次采用表3.2给 出的前7种颜色。
表 3.1 线型选项 选 项 : --. 线 型 实线(默认值) 虚线 双画线 点画线
二维统计分析图 MATLAB中提供了多个函数可绘制各种条形图,bar函数 绘制柱形图,barh函数绘制水平条形图,stem函数绘制杆 图,errorbar函数绘制误差条图。 下面以bar函数为例说明用法。 bar函数的调用格式为 bar(x,width,style) 当x是m × n阶的矩阵时,绘制的条形图以分组或堆积的 形式表现。矩阵中每一行元素绘制在一组中,每一列元素 绘制在每组中相对应的位置上。其中,width设置条形的 相对宽度和控制在一组内条形的间距,默认值为0.8, style指定条形的排列模式,类型有'group'(分组)和 'stack'(堆积),默认时采用图命令每执行一次就刷新当前图形窗口,原有图形 将不复存在。若希望在已存在的图形上再叠加新的图形, 可使用图形保持hold on/off命令控制是保持原有图形还是 刷新原有图形。 例如: x=0:pi/100:2*pi; y1=0.2*exp(-0.5*x).*cos(4*pi*x); plot(x,y1) hold on y2=1.5*exp(-0.5*x).*cos(pi*x); plot(x,y2); hold off
表 3.2 选 项 b( blue ) g( green ) r (red) c(cyan ) 颜色选项 颜 蓝色 绿色 红色 青色 色 选 项 颜 色 m (magenta) y (yellow) k (black ) w( white) 品红色 黄色 黑色 白色
第26章 matlab二维图形

1.调出图形和摄影机工具栏:View—Figure/Camera(该菜单在图形窗口中)。
2.图形特性的有关设置可以通过菜单、工具栏和函数都能实现。
3.plot函数, plot函数是绘制二维图形最常用的函数。
(1)绘制正弦图像:x=linspace(0,2*pi,30)y=sin(x)plot(x,y),title('Figure 26.1: Sine Wave')当plot函数被调用时,便打开一个称为图形窗口的视窗,将两个坐标轴进行适当缩放以满足数据绘制的要求,然后再指定的位置上绘制出数据点,最后将数据点用直线连接起来。
plot函数能自动给坐标轴标注上坐标值以及标号。
如果图形窗口已经存在,plot函数就会自动将当前图形檫除然后绘出新的图形。
(2)在一幅图形上绘制多条曲线或直线z=cos(x)plot(x,y,x,z)title('Figure 26.2:Sine and Cosine')只要在调用plot函数时给它提供第二个参数对(如x-z),该函数就会绘制出另一个曲线,且以不同的颜色显示。
实际上对于plot函数而言,能绘制的曲线个数是没有限制的,用户传递多少个输入参数对,就能画出多少条曲线。
(3)输入参数对一个是矩阵,一个是向量,则plot函数会将矩阵中的每一列与向量参数组成一个输入对,分别绘制出相应的图形。
例如:w=[y;z]plot(x,w)绘制出来的图形与(2)相同;如果改变参数对的顺序,plot函数就将绘制的图形旋转90度。
例如plot(w,x)title('Figure 26.3:Change Argument Order')(4)也可以只用一个输入参数Y调用plot函数。
此时,plot函数就会根据参数包含的数据进行不同的操作:对于复数向量,plot(Y)就相当于执行plot(real (Y),imag(Y))(注意:只有在单输入参数情况下,plot函数才会绘制复数的虚部图形,在其它情况下,输入向量的虚部是被忽略的);Y是实值向量,那么plot(Y)就相当于执行plot(1:length(Y),Y),plot函数将以Y的各元素的索引值为横坐标,以Y为纵坐标绘制出图形;当Y是一个矩阵时,就将Y的每一列视为实数向量来处理。
MATLAB 12二维图形

命令 功能 用法
xlabel、ylabel 给x、y 轴贴上标签 xlabel(‘string’)、 ylabel(‘string’) 给当前轴对象中的x、y轴 贴标签; xlabel(fname)、ylabel(fname) 先执行函数fname,其返回一个 字符串,然后在x、y轴旁边显示出来。 注意:若再次执行xlabel或ylabel命令,则新的标签会覆盖旧的标签。 [例12—10] 链接 Example04_5。
12.2 线型、标记和颜色
在每一对数组数据后面给plot一个附加参量,就可以指定所要的颜 色和线型。 plot(X1,Y1,LineSpec1,X2,Y2,LineSpec2 … )
3
将按顺序分别画出由三参数定义Xi,Yi,LineSpeci的线条。其中参 数LineSpeci 指明了线条的类型,标记符号,和画线用的颜色。 在plot 命令中可以混合使用三参数和二参数的形式: plot(X1,Y1,LineSpec1,X2,Y2,X3,Y3,LineSpec3) 参数LineSpec: 定义线的属性,包括: 线型、标记符号、颜色, 且用字符串来定义 。
5
[例12—3] 链接 链接 Example02 及Example02_1。
12.3绘图式样
colordef命令为图形选择一个整体式样。缺省式样为colordef white。这种式样用白色的坐标轴背景,浅灰色的图形背景,黑色 的坐标轴标志,jet颜色映象,以及篮色、墨绿包和红色作为的三种 绘图颜色。如果换成黑色背景,则用colordef black。这种式样 用黑色坐标轴背景,墨绿色图形背景,白色坐标轴标志,jet颜色映 象,以及黄色、紫红色和青色作为前三种绘图颜色。 如果用colordef none,为以前版本的样式。这种式样用黑色的 坐标轴和图形背景颜色,用白色坐标轴标志,hsv颜色映象,以及 黄色、紫红色和青色作为前三种绘图颜色。
MATLAB编程基础第讲二维及特殊坐标系二维绘图

(1) 当x是向量,y是有一维与x同维的矩阵 时,则绘制出多根不同颜色的曲线。曲 线条数等于y矩阵的另一维数,x被作为 这些曲线共同的横坐标。
(2) 当x,y是同维矩阵时,则以x,y对应列元 素为横、纵坐标分别绘制曲线,曲线条 数等于矩阵的列数。
(3) 对只包含一个输入参数的plot函数, 当输入参数是实矩阵时,则按列绘制 每列元素值相对其下标的曲线,曲线 条数等于输入参数矩阵的列数。
给坐标加网格线用grid命令来控制。grid on/off命令 控制是画还是不画网格线,不带参数的grid命令 在两种状态之间进行切换。
给坐标加边框用box命令来控制。box on/off命令控 制是加还是不加边框线,不带参数的box命令在两 种状态之间进行切换。
例7 在同一坐标中,可以绘制3个同心圆,并加坐标控制。
谢谢大家!
plot函数最简单的调用格式是只包含一个输入参数:
plot(x) 在这种情况下,当x是实向量时,以该向量元素的下标为横
坐标,元素值为纵坐标画出一条连续曲线,这实际上是绘 制折线图。
x=0:0.1:2*3.14
plot(x); 或者
x=0:0.1:2*3.14
y=sin(x);
plot(y);
二、 绘制多根二维曲线
当输入参数是复数矩阵时,则按列分别 以元素实部和虚部为横、纵坐标绘制 多条曲线。
2.含多个输入参数的plot函数
调用格式为:
plot(x1,y1,x2,y2,…,xn,yn)
(1) 当输入参数都为向量时,x1和y1,x2和 y2,…,xn和yn分别组成一组向量对, 每一组向量对的长度可以不同。每一向 量对可以绘制出一条曲线,这样可以在 同一坐标内绘制出多条曲线。
如何在Matlab中进行二维和三维绘图

如何在Matlab中进行二维和三维绘图在科学研究和工程领域,数据可视化是一项十分重要的任务,而Matlab作为一种功能强大的数值计算和数据分析软件,自然也提供了丰富的绘图功能。
本文将介绍如何在Matlab中进行二维和三维绘图,并探讨一些常见的绘图技巧和应用。
一、二维绘图Matlab中的二维绘图是最常见和基础的绘图任务之一。
在绘制二维图形时,我们通常会用到plot函数。
这个函数可以接受单个向量作为输入,将这个向量的值作为y轴上的数据点,自动生成与该向量长度相同的x轴坐标。
例如,我们可以用以下代码绘制一个简单的二维折线图:```x = 0:0.1:2*pi;y = sin(x);plot(x, y);```上述代码中,x参量取从0到2π的均匀间隔的值,而y则是根据x计算得到的sin函数值。
plot函数会自动根据输入绘制折线图,并添加相应的轴标签和图例。
在实际应用中,我们经常需要绘制多条曲线在同一个坐标系中进行对比分析。
可以通过在plot函数中传入多个x和y向量实现这一功能。
例如,我们可以通过以下代码绘制一个简单的双曲线图:```x = 0:0.1:2*pi;y1 = sin(x);y2 = cos(x);plot(x, y1, x, y2);```这样,就会在同一个坐标系中同时绘制sin曲线和cos曲线。
除了折线图,Matlab还支持其他常见的二维绘图类型,如散点图、柱状图和面积图等。
这些绘图类型可以通过不同的函数实现,例如scatter、bar和area等。
这里不再一一赘述,读者可以通过Matlab的帮助文档或官方网站了解更多的用法和示例。
二、三维绘图除了二维绘图,Matlab也提供了丰富的三维绘图功能,用于可视化更为复杂的数据和模型。
在绘制三维图形时,我们通常会用到surf函数。
这个函数可以接受两个二维矩阵作为输入,将这两个矩阵的值分别作为x、y轴上的坐标,而将第三个二维矩阵的值作为z轴上的数据点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.4.1 反射
y
2 1 3
沿x轴反射
1 0 0 0 -1 0 0 0 1
2' 1'
x 3'
2005 fall , Designed by fangcl .UESTC
5.4.1 反射
y
2 2' 3'
-1 0 0 0
1 0 0 1 沿y轴反射
0
3
1
1'
x
2005 fall , Designed by fangcl .UESTC
5.3.6实现
P154~P155
2005 fall , Designed by fangcl .UESTC
5.4 2D 其他变换
反射:产生对象的镜像
–沿X轴反射
–沿Y轴反射 –沿原点反射 –沿y=x
45度方向直线进行反射
错切:使对象发生形变
–沿X方向错切
–沿Y方向错切
2005 fall , Designed by fangcl .UESTC
2005 fall , Designed by fangcl .UESTC
2D变换的矩阵表示
变比变换
x' sx 0 y' = 0 sy 1 0 0
0 0 1
x y 1
P'=S(sx,sy) .P
2005 fall , Designed by通用变换方程:
例:沿指定方向缩放
cos-θ -sin-θ 0 sin-θ cos-θ 0 0 0 1 Sx 0 0 Sy 0 0 S2 0 0 1 cosθ -sinθ 0 sinθ cosθ 0 0 0 1
y
θ
S1
x
2005 fall , Designed by fangcl .UESTC
cos-45 -sin-45 0 sin-45 cos-45 0 0 0 1
5.1.1
平移
平移
– 定义: 对象沿直线运动产生的变换
– 平移是一种钢体变换
– 参数: 平移向量(tx, ty)
– 公式:
x'=x+tx
y'=y+ty
y
P'
P
x
2005 fall , Designed by fangcl .UESTC
5.1.1
齐次矩阵表示:
2D平移
使用列向量表示坐标位置 1 0 tx
5.1.3
齐次矩阵表示
缩放
sx 0 0 0 sy 0 0 0 1
x P= y 1
x' P'= y' S= 1
P' = S P
2005 fall , Designed by fangcl .UESTC
5.1. 3 缩放
针对任意点(xf,yf)缩放
•将绝对坐标转换为相对坐标 x''=x-xf y''=y- yf •缩放 x'''= x'' *sx y'''= x'' *sy
5.1. 2
旋转
针对任意点(Xr,Yr)旋转
x'= xr+(x-xr)*cosθ - (y-yr)*sinθ y'= yr+(x-xr)*sinθ +(y-yr)*cosθ
旋转变换的计算效率 改进:
2005 fall , Designed by fangcl .UESTC
旋转是一种钢体变换
y
θ
θ
x
2005 fall , Designed by fangcl .UESTC
5.1.3
变比
缩放
–定义: 改变对象尺寸的变换 –参数:缩放系数(Sx, Sy), 固定点(Xf,Yf) –公式:
针对坐标原点缩放 x'=x*Sx y'=y*Sy
2005 fall , Designed by fangcl .UESTC
5.4.1 反射
y 3'
2' 1' 1 2
沿(0,0)反射
x 3
-1 0 0
0 -1 0
0 0 1
2005 fall , Designed by fangcl .UESTC
T(tx2,ty2) .T(tx1,ty1)=T(tx1+tx2, ty1+ty2)
2005 fall , Designed by fangcl .UESTC
5.3.2 连续旋转
(θ1), P'
(θ2)
= R(θ2)
. R(θ1) . P
R(θ 2) .R(θ 1) = R(θ 1+θ 2)
x
x'
P= y 1
P'= y' 1
T= 0 1 ty 0 0 1
y
P'
P' = T.P
P
x
2005 fall , Designed by fangcl .UESTC
2D平移
y
100 50 50 100
举例
y
120
平移向量
(-20,20)
70
x
30
80
x
2005 fall , Designed by fangcl .UESTC
组合变换的通用变换矩阵
x' rsxx rsxy trsx y' = rsyx rsyy trsy 1 0 0 1
x y 1
2005 fall , Designed by fangcl .UESTC
连接特性
A*B*C = (A*B)*C = A*(B*C) A*B B*A
2005 fall , Designed by fangcl .UESTC
第5 章
基本变换 矩阵表示
二维几何变换
其他特殊变换
复合变换 坐标系间的变换 变换的光栅方法
2005 fall , Designed by fangcl .UESTC
5.1 基本变换
几何变换的定义:
– 改变对象坐标描述的变换称为几何变换,
例如改变对象的方向、尺寸和形状。
2005 fall , Designed by fangcl .UESTC
2005 fall , Designed by fangcl .UESTC
5.3.3 连续变比
(sx1,sy1),
(sx2,sy2)
P'
= S(sx2,sy2)
.S(sx1,sy1) .P
S(sx2,sy2) . S(sxn,syn) = S(sx1.sx2, sy1.sy2)
2005 fall , Designed by fangcl .UESTC
0 0 1
P'= R. P
2005 fall , Designed by fangcl .UESTC
5.1.2 旋转
y
(x',y')
r
θ Φ
(x,y)
(xr,yr)
x
绕任意点(xr,yr)旋转
2005 fall , Designed by fangcl .UESTC
5.1. 2
旋转
针对任意点(xr,yr)旋转
5.3.4 针对任意点变换
方法
•平移对象使基准点移动到坐标原点
•针对原点做指定变换 •反向平移对象使基准点回到原位置
举例
2005 fall , Designed by fangcl .UESTC
1、 针对固定点缩放
1 0 xf 0 1 yf 0 0 1 sx 0 0 0 sy 0 0 0 1
y x
y x
y x
y x
(xf,yf)
2005 fall , Designed by fangcl .UESTC
3、 针对任意方向变换
方法
•旋转对象使指定方向与坐标轴方向重合
•针对坐标轴方向做指定变换 •反向旋转使方向回到原方向
例
2005 fall , Designed by fangcl .UESTC
5.2 2D变换的矩阵表示
点
(x,y)
X y 1
2D
图形 (x1,y1),(x2,y2),...,(xn,yn)
X1 y1 1 x2 y2 ... xn ... yn 1 ... 1
2005 fall , Designed by fangcl .UESTC
5.2 2D变换的矩阵表示
变换矩阵
1 0 0 0 2 0 0 0 1 0 0 1
cos45 -sin45 0 sin45 cos45 0 0 0 1
1.5 0.5 M= 0.5 1.5 0 0
y
1
(1,1)
S1=1, S2=2
(0.5,1.5)
(1.5,0.5)
y
(2,2)
θ=45
s1
1
x
x
2005 fall , Designed by fangcl .UESTC
几何变换的基本原理
几何变换:
–变换图形就是要变换图形的几何关系,同
时保持图形的原拓扑关系
2005 fall , Designed by fangcl .UESTC
5.1 二维基本变换
基本几何变换的类型
– 平移
– 旋转
– 变比
2005 fall , Designed by fangcl .UESTC
5.3 复合变换
连续变换
– 连续平移
– 连续旋转
– 连续变比
针对任意点的变换 针对任意方向的变换 实现