二维变换 计算机科学与技术系.

Slides:



Advertisements
Similar presentations
我的 动 堂天 漫 制作人: 13312—22 青春 情感 悬疑推理 魔 法 系 列 动 漫系 列 动 漫 之.
Advertisements

商管群科科主任 盧錦春 年 3 月份初階建置、 4 月份進階建置、 5 月份試賣與對外營業。
第八章 土地行政管理.
「互联网金融2.0时代」与房地产的融合 广州互联网金融协会会长、广州e贷总裁 方颂.
企业会计学(三) 人大版本 吕 昌.
杭州中学数学网: 第三章《直线与方程》 第四章《圆与方程》 《解析几何初步》 教学解读 杭州市教育局教研室 李学军 联系电话 电子信箱 杭州中学数学网:
解析几何 空间直角坐标系 阜宁县东沟中学高一数学组.
少阳病和柴胡剂 郝万山(北京中医药大学).
據點考核與評鑑 報告人:臺南市政府 照顧服務管理中心.
北京中医药大学东直门医院 把握“癌”的命脉 祁烁 血液肿瘤科.
特殊族群運動健康訓練(I).
依据教材 全国高等教育自学考试指定教材 《西方行政学说史》, 竺乾威主编,高等教育出版社。
一、平面点集 定义: x、y ---自变量,u ---因变量. 点集 E ---定义域, --- 值域.
正 信 讀 書 會 主 持 群 : 姚 永 錩 、 鄭 健 、 陳 淑 珍 佛法的生活應用 2008/07/23.
非法集资典型案例评析 南京师范大学法学院 蔡道通 2016年1月.
专题(二) 交往沟通 掌握技能 命 题 解 读 背 景 材 料 新 题 演 练 考 点 链 接 1.
复 习 旧 课 拓 展 知 识 学 习 新 课 课 后 小 结 点击标题吧,会令你受益不浅! 课 后 练 习 自 我 评 价.
松竹梅岁寒三友 步入建交 桃李杏村暖一家 迈进职教 活出精彩.
四資二甲 第三週作業 物件導向程式設計.
死與生的自我掌握.
第八单元第二课第一课时 严守法律 温州四中 蒋莉青.
管理学基本知识.
高级财务会计.
默写基础知识: 1、家庭是由 关系、 关系或 关系而结合成的亲属生活组织。家里有 ,家中有 。
滁州学院首届微课程教学设计竞赛 课程名称:高等数学 主讲人:胡贝贝 数学与金融学院.
幸福大讲堂 也谈老年朋友的 “老有所□” 爸妈在线专家宣讲团 ——老年朋友如何乐度后半生概述 主讲:钱锡安
什么是颈椎病? 颈椎病是指颈椎间盘退行性变,及其继发性椎间关节退行性变所致脊髓、神经、血管损害而表现的相应症状和体征。
“深入推进依法行政加快建设法治政府” -《法治政府建设实施纲要》解读
伴性遗传 咸林中学 王卫平.
贴近教学 服务师生 方便老师.
第六节 可降阶的二阶微分方程 一、 型的微分方程 二、 型的微分方程 三、 型的微分方程.
1.5 充要条件.
第一单元 中国传统文化主流思想的演变.
公務人員退休法、撫卹法 法制與實務講習 銓敘部退撫司 中華民國99年8月.
《傅雷家书》 学 科:语文 年 级:九年级 授课教师:王宁宁.
拾貳、 教育行政 一、教育行政的意義 教育行政,可視為國家對教育事務的管理 ,以增進教育效果。 教育行政,乃是一利用有限資源在教育參
第一節 行政裁量與不確定法律概念 第二節 行政裁量
湖北武当山.
課程銜接 九年一貫暫行綱要( )  九年一貫課程綱要( ) 國立台南大學數學教育系 謝 堅.
2.4 二元一次方程组的应用(1).
本课设置5个环节 一、限时秒杀--5分钟 二、摩拳擦掌--9分钟 三、刀锋相见--20分钟 四、现炒现卖--5分钟 五、相约课后--1分钟.
马克思主义基本原理概论 第三章 人类社会及其发展规律.
第三课 萧山义桥镇上埠村-节孝承恩坊 建于清雍正八年(1730年)七月,乃“奉旨旌表已故儒士倪润妻金氏”
量子信息导论第一次习题课 陈哲
 1.3 三角函数的诱导公式.
第八章 组合变形.
1 在平面上畫出角度分別是-45°,210°,675°的角。 (1) (2) (3)
第五讲 从常用连续分布到二维变量分布 本次课讲授:第二章的 ; 下次课讲第三章的 ;
中華大學 資訊工程學系 報告人:資訊工程學系 許慶賢 系主任.
第一章 函数与极限 第一节 函 数 一、函数的概念 二、函数的表示法 三、分段函数 四、反函数 五、初等函数 六、函数的基本性态
第二章 三角函數 2-5 三角函數的圖形.
學生:吳星龍 班級:資管二乙 指導老師:劉書彥
Ch1 三角 1-2 廣義角與極坐標.
3-3 錐度車削方法 一、尾座偏置車削法 二、錐度附件車削法 三、複式刀座車削法.
第五模块 微分方程 第三节 二阶常系数线性微分方程 一、二阶线性微分方程解的结构 二、二阶常系数线性齐次微分方程.
平面向量的坐标运算.
第三模块 函数的微分学 第一节 导数的概念 一、瞬时速度 曲线的切线斜率 二、导数的定义 三、导数的几何意义 四、导数的物理意义 五、导函数
重庆市第一0四中学 王继军.
加減法文字題 國小低年級學生對加減法文字題的瞭解 小組成員 陳育娟 羅珠綾 侯宜孜
飛行器製作與飛行 講師:劉修建.
因果性:一个形而上学的预设 赵敦华 2008年5月.
例题2-5讲解 主讲人 束美其.
第五章 图形变换 在计算机绘图应用中,经常要进行从一个几何图形到另一个几何图形的变换,例如,将图形向某一方向平移一段距离;将图形旋转一定的角度;或将图形放大或缩小等等,这种变换过程称为几何变换。图形的几何变换是计算机绘图中极为重要的一个组成部分,利用图形变换还可以实现二维图形和三维图形之间转换,甚至还可以把静态图形变为动态图形,从而实现景物画面的动态显示。
三角比的恆等式 .
6.3一次函数图象(2).
統計網路學習館 線性迴歸.
第八章 异步电动机.
用加減消去法解一元二次聯立方程式 台北縣立中山國中 第二團隊.
三角 三角 三角 函数 已知三角函数值求角.
新人教A版 数学必修4 第三章 三角恒等变换 两角差的余弦公式.
Presentation transcript:

二维变换 计算机科学与技术系

概述 图形变换是计算机图形学基础内容之一 常见变换:几何变换,投影变换,视口变换 几何变换:平移、旋转和缩放等 模型视图变换:世界->观察 投影变换: 3D->2D 视窗变换: 窗口->视口 应用层 几何层 光栅化 3D 2D Pixels 几何变换 模视变换 投影变换 视口变换

几何变换 几何变换是应用图形编程中最常用的变换 几何变换目的 图形的几何信息经过几何变换后产生新的图形

几何变换 特点 属性不变,拓扑关系不变 变换的两种形式: 图形不变,坐标系改变 图形改变,坐标系不变 点线关系

几何变换 作用 可用于图形复制 减少用户的数据输入 把用户坐标系与设备坐标系联系起来 可由简单图形生成复杂图形 可用二维图形表示三维形体 动态显示 几何变换的基础是点变换

图形的几何变换基础-标量、点和向量 在CG中,主要是处理点和线段这样的几何元素 向量是有向的线段和用表示它们的n元数组 三个常用的实体-抽象数据类型 点:在3D中点是一个位置,数学上的点没有大小,也没有形状 标量:对于几何对象,还需要实数来确定数量 向量:表示既有大小还有方向的量

图形的几何变换基础-空间 向量空间(线性空间) 仿射空间 Euclid空间 对象:向量、标量 运算:标量--向量乘法、向量--向量加法 向量空间的扩展 对象:向量、标量、点(增加位置信息) 运算:点--点减法、向量--点加法 Euclid空间 增加了距离 对象:严格来讲,只包含两个对象,向量、标量 运算:点积(内积)

图形的几何变换数学基础 向量运算:和、点积、长度、叉积 矩阵运算:和、数乘、乘法、零矩阵、单位矩阵、逆矩阵、转置矩阵 齐次坐标

这种用3个代数分量表示2D几何概念的方式是一种齐次坐标表示。 图形的几何变换基础-齐次坐标 “齐次坐标表示是计算机图形学的重要手段之一,它既能够用来明确区分向量和点,同时也更易用于进行仿射(线性)几何变换。”—— F.S. Hill, JR 对于一个向量v以及基oab,可以找到一组坐标(v1,v2),使得v = v1 a + v2 b            而对于一个点p,则可以找到一组坐标(p1,p2),使得  p – o = p1 a + p2 b     p = p1 a + p2 b + o 这种用3个代数分量表示2D几何概念的方式是一种齐次坐标表示。

图形的几何变换基础-齐次坐标 齐次坐标:以 n+1 维向量表示一个 n 维向量问题 在 n 维空间中,点的位置用非齐次坐标表示时,具有 n 个坐标分量(p1, p2, … …, pn),且是唯一的。若用齐次坐标表示则为(hp1, hp2, … …, hpn, h), 且不唯一,其中h≠0。

图形的几何变换基础-齐次坐标 若二维点(x, y)的齐次坐标表示为(hx, hy, h),则(h1x, h1y, h1),也是同一点的齐次坐标。 三维点的齐次坐标可表示为(hx, hy, hz, h) 例如: 点P(2, 3)的齐次坐标: (1, 1.5, 0.5)、(4, 6, 2)、(6, 9, 3) -〉(2*h,3*h,h) 普通坐标转换成齐次坐标,给x,y乘上同一个非零数h,然后增加第3个分量h; 齐次坐标转换成普通坐标,把前两个坐标同时除以第3个坐标,然后去掉第3个分量。

二维点(x, y)的齐次坐标 h可以取不同的值,所以同一点的齐次坐标不是唯一的。 如普通坐标系下的点(2,3)变换为齐次坐标可以是(1,1.5,0.5)、(4,6,2)、(6,9,3)等等。 (x,y)点对应的齐次坐标为 (x,y)点对应的齐次坐标可理解为三维空间的一条直线

图形的几何变换基础-齐次坐标 普通坐标与齐次坐标的关系为“一对多” 由普通坐标h→齐次坐标 由齐次坐标÷h→普通坐标 为前n个坐标就是普通坐标系下的n维坐标。 在二维几何变换中,取 h = 1。即: (x y) 的齐次坐标是 (x y 1)

二维基本几何变换 二维基本几何变换是相对于原点或坐标轴进行的 平移变换 x’ = x + Tx y’ = y + Ty 旋转变换 x’ = x cosθ- y sinθ y’ = x sinθ+ y cosθ 比例变换 x’ = Sxx y’ = Syy (x,y) (x’,y’)

二维基本几何变换 分以y 轴对称、以x 轴对称、以原点轴对称、直线y = x 对称、以直线y = -x 对称五种情况 反射(对称、镜像)变换 例如, sx = -1 sy = 1 原始图 sx = -1 sy = -1 sx = 1 sy = -1

二维基本几何变换 错切变换 分沿x 轴方向错切、沿y 轴方向错切、沿xy 两个轴方向错切三种情况 例:沿x 轴方向错切: x’ = x + by=x + y cot θ y’ = y 注:平移和旋转变换不改变形体的形状和大小,又称为刚体变换, 错切和缩放不是刚体变换

二维基本几何变换的矩阵形式 旋转变换可以表达为矩阵形式: 用矩阵表示变换,不仅书写简单,而且连续施加变换可以写成矩阵连乘的形式。 比例、反射、错切变换都能写成矩阵形式,只有平移变换不能。如何使平移变换也能写成矩阵形式呢? [x’ y’] = [x y] cosθ sinθ -sinθ cosθ = [ x cosθ- y sinθ x sinθ+ y cosθ]

二维基本几何变换的矩阵形式 二维几何变换的基本方法 将变换矩阵作为一个算子,作用于变换前的图形顶点集合的规范化齐次坐标矩阵上,得到变换后的图形顶点集合的规范化齐次坐标矩阵。 设二维图形变换前坐标为(x,y,1),变换后为(x*,y*,1)   二维变换矩阵 注意:T2D可看作三个行向量 (x*, y*, 1) = (x, y, 1) T2D

基本几何变换的矩阵形式-平移变换 平移变换只改变图形的位置,不改变图形的大小和形状

基本几何变换的矩阵形式-比例变换 以坐标原点为放缩参照点 当Sx=Sy=1时:恒等比例变换 当Sx=Sy>1时:沿x, y方向等比例放大。 当Sx=Sy<1时:沿x, y方向等比例缩小 当SxSy时:沿x, y方向作非均匀的比例变换,图形变形。

基本几何变换的矩阵形式-反射变换 当Sx=-1, Sy=1时与y轴对称的反射变换 当Sx=1, Sy=-1时与x轴对称的反射变换 原始图 当Sx=1, Sy=-1时与x轴对称的反射变换 当Sx=-1, Sy=-1时与原点对称的反射变换

基本几何变换的矩阵形式-旋转变换 注意θ是逆时针旋转角度

(d)沿y正向错切 (e)沿y负向错切 (f)沿x和y正向错切 基本几何变换的矩阵形式-错切变换 (a)正方形 (b)沿x正向错切 (c)沿x负向错切 (d)沿y正向错切 (e)沿y负向错切 (f)沿x和y正向错切 错切变换

基本几何变换的矩阵形式-错切变换 当d=0时,(x* y* 1)=(x+by y 1),图形的y坐标不变; 当b>0,图形沿+x方向作错切位移。 当b<0,图形沿-x方向作错切位移。

基本几何变换的矩阵形式-错切变换 当b=0时, (x′y′1)=(x dx+y 1)图形的x坐标不变; 当d>0,图形沿+y方向作错切位移。 当d<0,图形沿-y方向作错切位移。

基本几何变换的矩阵形式-错切变换 当b0且d0时,(x′y′1)=(x+by dx+y 1) 图形沿x, y两个方向作错切位移。 错切变换引起图形角度关系的改变,甚至导致图 形发生变形。

二维基本几何变换的矩阵形式 从变换功能上可把T2D分为四个子矩阵 沈阳工业大学信息科学与工程学院 计算机图形学

二维复合变换 基本几何变换的基本二字的含义是指有一定限制的,不适用于所有的变换。 复合变换又称级联变换,指对图形做一次以上的几何变换。 注意:任何一个线性变换都可以分解为上述几类变换。 注意:

复合平移 求点P(x, y)经第一次平移变换(Tx1,Ty1),第二次平移变换(Tx2, Ty2)后的坐标P*(x*, y*) 设点P(x,y,1)经第一次平移变换后的坐标为P‘(x y 1),则 经第二次平移变换后的坐标为P*(x* y* 1) 则复合变换矩阵为Tt=Tt1•Tt2

多种复合组合 例:对一线段先放大2倍(即Sx=Sy=2),再平移Tx=10,Ty=0。 设点(x,y)为线段上的任意一点,点(x´,y´)为点(x,y)放大 后的坐标,点(x´´,y´´)为点(x´,y´)平移后的坐标,则: [x´, y´, 1]= [x, y, 1]*S2 [x´´, y´´, 1]= [x´, y´, 1]*T2 [x´´, y´´, 1]= [x, y, 1]*S2*T2 令:M=S2(2,2)*T2(10,0) ,则M即为复合变换

任意点的旋转变换 基本几何变换的旋转θ角是指 “绕原点旋转θ角” 对绕A点旋转θ角的情况要用到复合变换(基本几何变换的组合)。 利用复合变换调整参考点 几何变换不改变图形的连接关系和平行关系

任意点的旋转变换 例: 一个由顶点P1(10,10),P2(30,10)和P3(20,25)所定义的三角形,相对于点Q(10,25)逆时针旋转30°,求变换后的三角形顶点坐标。 Q P3 P2 P1 平移变换 P1 P2 P3 Q 原始图形

任意点的旋转变换 Q P3 P2 P1 Q P3 P2 P1

任意点的旋转变换 P1(17.5,12.01),P2(34.82,22.01)和P3(18.66,30)

任意方向的二维几何变换 例: 将三角形相对于轴线y=kx+b作反射变换,计算每一步的变换矩阵 y=kx+b (0,b) 原始图形 平移变换

任意方向的二维几何变换 旋转变换 反射变换

任意方向的二维几何变换 反旋转变换 反平移变换

几何变换程序实现 class CP2 { public: CP2(); class CTransform//二维几何变换 CP2(double,double); double x, y, w; }; class CTransform//二维几何变换 { public: CTransform(); virtual ~CTransform(); void SetMat(CP2 *,int); void Identity(); void Translate(double,double);//平移变换矩阵 void Scale(double,double);//比例变换矩阵 void Scale(double,double,CP2);//相对于任意点的比例变换矩阵 void Rotate(double);//旋转变换矩阵 void Rotate(double,CP2);//相对于任意点的旋转变换矩阵 void ReflectO();//原点反射变换矩阵 void ReflectX();//X轴反射变换矩阵 void ReflectY();//Y轴反射变换矩阵 void Shear(double,double);//错切变换矩阵 void MultiMatrix();//矩阵相乘 double T[3][3]; CP2 *POld; int num; };

void CTransform::Identity()//单位矩阵 { T[0][0]=1.0;T[0][1]=0.0;T[0][2]=0.0; T[1][0]=0.0;T[1][1]=1.0;T[1][2]=0.0; T[2][0]=0.0;T[2][1]=0.0;T[2][2]=1.0; } void CTransform::Translate(double tx, double ty)//平移变换矩阵 Identity(); T[2][0]=tx; T[2][1]=ty; MultiMatrix(); void CTransform::Scale(double sx, double sy)//比例变换矩阵 T[0][0]=sx; T[1][1]=sy;

void CTransform::Rotate(double beta)//旋转变换矩阵 { Identity(); double rad=beta*PI/180; T[0][0]=cos(rad); T[0][1]=sin(rad); T[1][0]=-sin(rad);T[1][1]=cos(rad); MultiMatrix(); } void CTransform::Rotate(double beta,CP2 p)//相对于任意点的旋转变换矩阵 Translate(-p.x,-p.y); Rotate(beta); Translate(p.x,p.y); void CTransform::ReflectO()//原点反射变换矩阵 T[0][0]=-1; T[1][1]=-1;

void CTransform::ReflectX()//X轴反射变换矩阵 { Identity(); T[0][0]=1; T[1][1]=-1; MultiMatrix(); } void CTransform::ReflectY()//Y轴反射变换矩阵 T[0][0]=-1; T[1][1]=1; void CTransform::Shear(double b,double c)//错切变换矩阵 T[0][1]=b; T[1][0]=c;

void CTransform::MultiMatrix()//矩阵相乘 { CP2 *PNew=new CP2[num]; for(int i=0;i<num;i++) PNew[i]=POld[i]; } for(int j=0;j<num;j++) POld[j].x=PNew[j].x*T[0][0]+PNew[j].y*T[1][0] +PNew[j].w*T[2][0]; POld[j].y=PNew[j].x*T[0][1]+PNew[j].y*T[1][1] +PNew[j].w*T[2][1]; POld[j].w=PNew[j].x*T[0][2]+PNew[j].y*T[1][2] +PNew[j].w*T[2][2]; delete []PNew;