首页 > 其他分享 >03 Transformation

03 Transformation

时间:2023-04-13 18:11:25浏览次数:26  
标签:03 变换 矩阵 Transform 2D Transformation 仿射变换

关键点

  • Affine Transformation (Linear Transformation, Transmation)
  • Homogeneous coordinates
  • Composite Transform
  • 2D and 3D

1. Linear Transformation (2D for instacnce)

1.1 Scale

Reflection

1.2 Shear

1.3 Rotate

默认以原点为中心逆时针。

1.4 总结:Linear Transformation

2. Homogeneous coordinates 齐次坐标 (2D for instacnce)

2.1 Translation


可见Translation不是线性变换,由此引入齐次坐标来获得统一的transformation表示方法。但是,齐次坐标带来了新问题。

2.2 Homogeneous coordinates

增加一个维度,来表示点或者向量,点的新维度值为1,而向量为0

那么,点的平移变换也可以写作线性变换形式;同时,保证了向量的平移不变性:

进一步的,可以保证空间中的点或向量运算的法则:

其中,对于新坐标w不为0或1,需要变换成1获得点的标准形式。因此,对于点的加法,或者说w=2,可以看作2个点的中点。

2.3 Affine Transformation 仿射变换

2.3.1 使用齐次坐标来表示仿射变换:


在二位情况下的规律为,左上角2x2矩阵为线性变换矩阵,右上角2x1矩阵为平移,最下面一行是[0,0,1]:

2.3.2 代价

  • 点或者向量表示多了一个维度,且变换矩阵增加三个值,但是对于二维仿射变换,最下面一行是确定的,所以不需要保存。

3. Inverse Transform (2D for instacnce)

4. Complex Transform (2D for instacnce)

4.1 Composite Transform

  • 复杂变换可以由一系列简单变换得到。
  • 矩阵乘法不满足交换律(对顺序敏感):对于列向量表示的点,放在变换矩阵的右侧,相应的先进行的变换对应的变换矩阵在右侧。
  • 矩阵乘法满足结合律:所有复杂变换都可以用一个3x3变换矩阵表示。
  • 任意一个变换矩阵可以视作两部分操作:先进行复杂或者简单的线性变换,最后进行平移。这个可以从仿射变换的定义的到。

4.2 Decomposing Complex Transform

  • 可以实现绕任意轴或点的旋转变换:

5. 3D Transforms

5.1 Homogeneous Coordinates


5.2 Transformations

对于3D仿射变换,与2D情况一致:最后一行为[0,0,0,1],左上角为线性变换,右上角为平移。

标签:03,变换,矩阵,Transform,2D,Transformation,仿射变换
From: https://www.cnblogs.com/etherovo/p/17315654.html

相关文章

  • POJ 1703 Find them, Catch them(种类并查集)
    题目地址:POJ1703种类并查集水题。代码如下:#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<stdlib.h>#include<math.h>#include<ctype.h>#include<queue>#include<map>#includ......
  • HDU 2120 Ice_cream's world I(并查集)
    题目地址:HDU2120这题虽然字数不多,但就是看不懂。。意思是求最多有多少个被墙围起来的区域。显然就是求环的个数。然后用并查集求环个数就可以了。代码如下:#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<stdlib.h>#include<math......
  • Ural 1353 Milliard Vasya's Function(DP)
    题目地址:Ural1353定义dp[i][j],表示当前位数为i位时,各位数和为j的个数。对于第i位数来说,总可以看成在前i-1位后面加上一个0~9,所以状态转移方程就很容易出来了:dp[i][j]=dp[i][j]+dp[i][j-1]+dp[i][j-2]+.......+dp[i][j-9];最后统计即可。代码如下:#include<iostream>#i......
  • taro3.6.4 在H5 端使用 tabBar 出现bug --- taro Cannot read properties of undefi
    taro3.6.4在H5端使用tabBar出现bug解决办法就是换版本3.6.2好像没有这个问题已经有人反馈了,https://github.com/NervJS/taro/issues/13581taroCannotreadpropertiesofundefined(reading'list')......
  • Python程序笔记20230305
    n以内能被m整除的数的和、积最初版本计算指定数字内所有偶数的和n=int(input("请输入指定的n:"))i=0mysum=0whilei<=n: ifi%2==0: mysum=mysum+ii=i+1print(f"{n}以内的所有偶数的和是{mysum}")print("{0}以内的所有偶......
  • 运行项目报错Cannot read property 'styles' of undefined
    原因是安装依赖版本不对,以下是我的解决办法:1、先删除项目中package-lock.json文件及node_modules文件(可使用rimraf指令删除node_modules,直接删文件很慢)2、执行npmi--legacy-peer-deps  指令,会发现自动帮我们生成了package-lock.json及node_modules,这个命令是用来安装......
  • 03.网络编程入门
    1、概述什么是网络编程?网络编程可以让程序与网络上的其他设备中的程序进行数据交互。网络通信的基本模式:Client-Server(CS)、Browser/Server(BS)CS模式BS模式网络通信三要素......
  • 动态规划03——322. 零钱兑换
    322.零钱兑换给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表示总金额。计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。示例 1:输入:coins=[1,2,5],amount......
  • L1-033 出生年
    一、问题描述  以上是新浪微博中一奇葩贴:“我出生于1988年,直到25岁才遇到4个数字都不相同的年份。”也就是说,直到2013年才达到“4个数字都不相同”的要求。本题请你根据要求,自动填充“我出生于y年,直到x岁才遇到n个数字都不相同的年份”这句话。输入格式:输入在一行中给出出......
  • 同样的文件用'du'、'ls -l'与'ls -s'查看大小不同
    清空文件的几种方式>access.logcat/dev/null>access.logddif=/dev/nullof=access.logddif=/dev/zeroof-access.logbs=1024count=2为什么同样的文件在不同的文件系统中大小不一样?'du'、'ls-l'与'ls-s'的区别辨析磁盘告警之---神奇的魔法(Sparsefile)......