GAMES 图形学系列笔记(十五)

GAMES001-图形学中的数学 - P16:拓扑 - GAMES-Webinar - BV1MF4m1V7e3

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

能听到吗,喂能听到吗,好那我们就开始今天的课程,今天是我们games4001系列的最后一堂课呃,我们进入到有关数图形学中,数学的最后一个专题,也就是拓扑的部分,然后今天这节课会比以往的课程都要简单一些。

因为我们会略去那些非常严格的,书写上的定义和证明,因为呃如果说要深入的去讲,拓扑的定义和证明的话,比起前面的那些内容要更加复杂一些,所以我们主要是定性的了解一下,有关拓扑的相关的概念和知识。

然后大家之后再这个学习和研究当中,应用到与拓扑相关的部分的时候,可以引为参考,和往常一样,首先我们来看一下什么是拓扑,拓扑呢,它其实从词源上来说,它又它只是位置分析的意思,什么是位置分析呢。

他就是说我只关心图形和图形之间的,位置的关系,而不考虑每个图形的大小或者是图形上的呃,分析或者代数的相关的内容,就呃暂时不在考虑范围内,我们主要考虑的是图形的位置,图形的位置呢最关键的就是它的相对位置。

呃或者呢这个我们之后也会看到,这个呃位置关系是可以包含图形的连续变形的,什么叫连续变形,我们之后就会讲到,然后它呃研究这种连续变形下不变的整体性质,的一门几何学,它就叫做拓扑。

所以拓扑呢本质上说也是几何学的一个部分,然后最经典的拓扑问题,相信大家一定呃接触过,比如这个四色问题,四色问题又称为地图染色问题,它指的是说呃给定一个一张地图,地图上面有各个省份或者是各个国家。

然后呃我们想说我们至少要用多少种颜色,给每一个省份去涂上颜色之后,保证相邻的两个省份之间的颜色一定不同,那么最少需要多少种颜色呢,这个问题已经被证明了是四种颜色,然后类似的还有这个技巧问题。

或者是大家很熟悉的,小学奥数里面就会出现的一笔画问题,就给定一张给定一个图形,你能不能一笔把它画出来,什么叫一笔画出来的,就是上面的任何一条边你都不会被重复的,经过两次,它最早是来源于这个欧拉在思考。

这个城市里面有七座桥,我能不能够呃不重复的,正好一次性一一条路线走遍这七座桥,然后中间不会重复的把一座桥跨越两次,那么这问题抽象出来,就是我们这个最右边的这幅图,最右边的这幅图,这个七桥就对应。

最右边这幅图上面的每个顶点就是一块区域,然后每条边就是一座桥,然后这个问题的解答也很简单,就是我们直接去看上面每一个节点的度数,就可以了,上面的应该是,如果一个节点是偶数度的,那么它是不影响答案的。

然后奇数度的呢,基数度的节点应该是最多有两个,或者说必须有两个吧,为两个或者零个,只有在这种情况下,可以一次就是一笔走过这个画画完整个图形,或者说走过这七座桥,好那我们稍微深入一些。

来看这个所谓同胚的概念,只有有一个很著名的这个数学上的笑话,说,拓扑学家不能区分区分咖啡杯和甜甜圈,因为为什么呢,因为一个足够柔软的甜甜圈,我们可以把它捏成一个咖啡杯的形状啊,右边这个不是咖啡杯啊。

但是你可以把它看成是咖啡杯,把饼对着天空拎起来的这样一个图形,这里我们说的足够柔软,就是你可以想象这个甜甜圈,它是一个橡皮泥做成的,然后你可以去捏这个橡皮泥的任何一个地方,把它捏成一个别的形状。

但是你不能把两块橡皮泥粘在一起,你也不能把一个橡皮泥从中间挖一个洞,但是你可以手这样捏,那么两个流行,如果可以通过这种操作,把其中一个变为另一个,我们就认为两者是同胚的。

然后这个操作在数学上来看是包括哪些呢,它包括弯曲延展剪切,但是这里的剪切注意一定得,最终还要沿着当初剪开的缝隙再重新粘起来,我们就认为这两者是同配的,那么一些最简单的例子是什么呢。

比如说圆和正方形它是同配的,那那很这这个很很好理解嘛,你把这个呃正方形的这个四个角揉一揉,把它揉成一个圆形,对这样东西它就是同配,那么求面去掉一个极点和二维平面是同配的,这件事情好理解吗。

其实也挺好理解的对吧,因为球面我们知道球面是有参数化的,球面参数化可以用球坐标theta和phi来表示,然后theta和phi表示最大的问题是,如果你theta和phi c a的参考点选的是北极点。

那么你的南极点其实就是,南极点那个地方它也是一个也是一个连续的点,但是我们却没有办法,把那个连续的点给表示出来,所以事实上就相当于说我有一个theta和phi,定义的参数空间,这个参数空间是二维的。

那你说二维的,它肯定是和一个正方形是同配的,或者呃不不需要想的,这用参数化的角度去想的话,你就是想如果一个球,你从最底下给他挖一个洞,然后你是不是就可以把它揉揉揉捏一捏,捏成一个二维的图形了。

所以呢根据以上的这个定义呢,我们还会发现球面和环面它不是通配的,环面就是甜甜圈,它就是一个环面啊,就甜甜圈就是一个环,那么球面和环面它显然嗯不能是同配的,而莫比乌斯环和环面呢它是可以是同配的。

因为你可以把甜甜圈看成是一个圆环,看是一个圆环,然后你把这个圆环从中间给剪开,然后把它转180度,再接上,所以莫比乌斯环和环面是通配的,莫比乌斯环是一种非非常著名的这个拓扑结构。

并且它有一个很重要的性质,就是它无法区分内外,他的两个面是等同等同定义的,就没有内和外的概念,你沿着莫比乌斯环走走一圈下来,可以正好走遍莫比乌斯环上的每一个地,每每一块地方,刷完铜胚以后,我们来看亏格。

什么叫亏格呢,就是说,如果曲面中最多可以画出N条闭合的曲线,同时不将曲面分开,我们就称为该曲面的亏格,亏格为N,那么举一个例子,比如说一个平面,一个平面里面你只任画一条闭合曲线,都一定会将曲面分开对吧。

所以该曲面的亏格就是零,那我们再看这个甜甜圈,你在甜甜圈上画一条闭合曲线,是可以不将甜甜圈分开的,比如说我们它就相当于你沿着甜甜圈的外延,拿剪刀给剪一圈,剪完以后是不是变成一个圆柱形的。

它还是粘在一起的对所以甜甜圈的规格就是一,那么可以证明对于一个十的闭曲面来说,就是亏格是什么呢,亏格是曲面上动眼的个数,比如说球面球面上没有动,所以它的规格是零,然后圆盘或者是甜甜圈呃,这不是就是圆盘。

圆盘也没有动,所以圆盘的规格也是零,然后圆环圆环和甜甜圈是同胚的,它的规格是一啊,或者是这种最右边这个两个圆环的,这个这个情况,那么他的亏格就是二,所以K格是一个非常直观上可以去理解的,这样一种概念。

那么以基于规格的定义呢,我们呃在拓扑学上又形成了这个,闭曲面分类定理,这是一个很神奇的性质啊,他是说所有的二维的闭曲面,它一定同配于以下三种情况之一,其中第一种就是球面,二维的B曲面,它要么是球面。

要么是环面的连通和什么是联通,和我右边举的这个三个例子,一个是甜甜圈,一个是两个甜甜圈,这个呃并在一起,一个是三个甜甜圈并在一起啊,这叫连通和就是我把它并在一起,同时保证它是连通的。

那么甜甜圈的be这是第二种情况,第三种情况是摄影平面的连通和,那么这种曲面它就是不可定向的,就甜甜圈,你是有内和外之分的,而我们看右下角这幅图,这个图是克莱因瓶,它是没有内和外之分的。

可爱音频的右上角有一个洞,但是这个洞竟从这个洞往里面,这个,倒水的话你会发现它是只有一个,只有只有一个面的,就内部的这个面和外部的这个面是连通在一起,它不像我们平常一个圆柱形的水壶,水水呃。

这个水壶你在里面转不会转到外面来,他现在这个内和外完全是连续的连在一起的啊,这种就是不可定向曲面,我没有办法区分内和外这两个概念,然后呃类似于克莱音频这种操作,他就是摄影平面的联通盒。

那么啊这种曲面一般来说是比较就比较少见的,我一般考虑的是前面两种曲面,所以你大致可以认为,所有你在研究当中关心的二维的B曲面,它要么是球面,要么是环面的联通和,同时呢呃B区面呢还有一个三角剖分的定义。

它是说任何闭曲面上都存在一个有限个三角形,表示的三角剖分呃,有一些图形学背景的同学肯定会知道,这个在图形学上去研究一个曲面,我们一般都是把它给变成三角网格的,什么是三角网格。

其实它就是一个对曲面的三角剖分,那么这时候根据我们现在这个定理,任何B曲面上都存在一个有限的三角形,表示的三角图分,也就是说我们用这个三角网格去分析的方法,是适合于任何闭曲面的。

当然这个事情大家平时在用的时候,可能也没有想到这个它为什么是这样,可能也没有思考过,就觉得他已经天然的可以分成三角图分,但是呃就是如果从严谨的角度上来说,这是对应着一个定理的。

有了这个规格和三角剖分的概念以后呢,我们来看欧拉示性数的概念,什么叫欧拉示性数呢,欧拉氏性树是一个不碎,不随同胚改变的拓扑不变量,就是不管你是咖啡杯还是甜甜圈,你的欧拉示性数是一样的。

欧拉示性数的定义是说呃,我记X是这个某一个这个流行,然后他的欧拉示性数K等于一的I次幂,乘上NIKK是什么,K就是X这个流形的三角剖分,而NI呢是这个呃三角剖分当中,I为单纯型的个数。

比如说啊我有一个三维当中有个曲面,就是一个二维曲面,这二维曲面我给它做三角剖分,剖,分完以后单纯型是什么,你有那个零零阶的单纯形,零阶的单纯形就是点对吧,你还有一阶的单纯形。

一阶的单纯形就是边三角形的边,然后你还有二阶的单纯形,二阶的单纯形就是三角形本身,然后呃所以对于一个二维的曲面来说,它的欧拉示性数,就等于它的三角剖分的点的个数减去边的个数,加上面的个数。

并且我们说对于任何必定向曲面来说,它的欧拉示性数K1定等于2-2G,这是一个定理,既是什么,既是规格,比如说对于一个球面来说,球面的规格是零,所以它的欧拉氏性数一定是二二减,因为K等于二减,零等于二。

那么它就意味着说,由于我任何一个简单的多面体,都是同配于一个球面的,所以对于任何的一个简单的多面体来说,我必然会满足顶点个数减去边的个数,加上面的个数等于二,可能大家在别的地方接触过这个公式。

这个公式又叫欧拉公式或者叫欧拉定理,在别的地方,大家可能会想这个VEF这些,他之间是要怎么组合,这东西可能像是要背的,但是我们接触了这个欧拉示性数的概念之后,我们发现这东西不用背。

它就是零阶单纯型的个数,减去一维单纯形的个数,加上二维单纯形的个数,如果你给定的东西是一个高维的,比如说是三维的一个图形,你给他做了这个额四面体的扣分的话,我还是一样的,它就是顶点个数减去边的个数。

加上面的个数减去四面体的个数,并且它还是等于二,然后从这个简单多面体的欧拉示性数K等于二,这件事情呢,我们又可以推导出,任何连通的平面图的欧拉公式,为什么呢,因为我任何一个连通的平面图。

我在平面外取一点,并且将它,并并且将这个点与平面图的边界点连边,会发生什么,会发生,我的顶点数变成了顶点数加一,然后边的数目变成了边数,加上边界上的这个,额加上了这个边界上的边数,边界上顶点数。

然后我的面数变成了什么呀,面数变面变成了面数,加上边界上的顶点数减一啊,这里我少打了一个F加,这少打了一个F加,然后我就可我就变成了一个简单多面体了对吧,我就可以用上面这个公式,V减一加F减二加呃。

V减一加F等于二,这个V减一加F等于二呢,它恰好就和底下的V减E加F是相等的,因为顶点加了1F加了B减一,而E加了B所以最终呢什么也没有变,也就是说对于联通的平面图来说也一样,有欧拉公式。

顶点数减去边数加上面数等于二,举一个例子,这是一个连连通的平面图,它其实就是在一个四边形中间做了一次,切了一刀,图上有几个顶点,还是一共四边形,所以V等于四对吧,图上有几条边,是五条边对吧。

你团有几个面,团上有两个面,诶床上有两个面,我来看一下呃,1234,啊啊啊对对对,这个地方没有没有这个性质,就F会变成的是额F加B啊,F加B因为是有多少个顶点,就会加多少个,那么四。

所以最后会把这个变成V减一,加F等于一,对这是联通的平面图的欧拉公式,或者我们再换一种情况,比如说我多加一个点,主上有几个点呢,12345A等于五,然后有多少个边呢,12345677个边,有几个面呢。

三,然后5+3减七还是等于对,这就是联通的平面图的欧拉公式,可以从这个定向曲面的欧拉公式给他推导出来,这个B定向曲面的欧拉公式呢,我们可以看这个右边这幅图,看这个立方体,这个立方体有额多少个顶点呢。

是有12345678 18个顶点,有多少个面,是六个面,然后呃,然后多少个边呢,是12个边,你看这个8+6减12哎,它等于二,就是这个简单多面体的这个欧拉公式,好我们来看下一个概念,下一个概念是减绕数。

减绕数是说一个,它是一个表示曲线绕过某点的总次数的整数,那么简要数呢它是和曲线定向是有关的,假如我们认为逆时针的环绕是,就是在右手系当中的话,那么逆时针的环绕减绕数加一,然后顺时针环绕一圈呢。

减二数减一,那么简奥术之外呢还会有一个回转数的概念,回转术呢它其实是曲线的速度矢量,什么速度矢量就是曲线的切线,这个切线曲线的切线关于原点的卷绕数,或者我们可以把它看成是曲线的总曲率,除以二派。

那么卷绕数和回转数是不一样的,比如说右图右图整这整个曲线关于来看看呃,换成这个荧光笔吧,右图这整个曲线,关于P点呢,他的卷绕数是二,为什么呀,我们可以看到这样他转了一圈,然后我又这样又转了一圈对吧。

所以它卷绕数是二,但是呢他的回转数是三,它的回转数是三,因为回转数是等于曲线的总曲率除以二派,回转数等于现在总区域除以二派,所以他跟P点是无关的,它没有参考点,他就是看我曲线每一点的曲率。

然后把这个曲率全部算出来以后加和求个积分,然后除以二派,那么这一右图这个期限的回转数呢就是三,它它并不等于P点的减绕数,因为减绕数是要取参考点,这两个概念是有有一定的差别,然后呃平面中的曲线呢。

还会存在这个roll当曲线定理,这个其实我们之前在计算几何那一节里面,已经讲过了,若尔当曲线定理是计算几何当中,用这个呃光线投射算法,来判断点与多边形关系的这样一个策略,他是说任何一条简单的B曲线。

都可以将平面分成两部分,比如说呃我随便画一条曲线,这个曲线是不是把屏幕分成两部分啊,也就是曲线内和曲线外对吧,分成了这两部分,那么连接同一部分,任意两点的弧与该曲线是不相交的,或者相交偶数次。

比如说这个弧和这个曲线相交吗,它不相交,那么或者画这么画,画这么一条弧,这个曲线和这个呃,这个弧和刚刚我们说的是比曲线相交嘛,相交它相交了两次,如果是连接不同部分的两个点呢,比如说这一点和这一点呢。

那么它就会和这个简单的B曲线相交奇数次,然后因此我们会有点和多边形关系的,光线投射算法,我们就取这个多边形是这个简单闭曲线,然后我们取从这个判断点出发的射线是这条弧。

那么弧与多边形相交一次都会改变内外关系,又我们又知道无穷远点一定在多边形外,所以相交点的个数是奇数的时候,点在多边形内,相交点个数为偶数的时候,点在多边形外,下面我们来看这个布劳威尔不动点定理。

他是说一个从欧几里得空间的某个给定的凸,极凸的井的子集设到它自身的连续函数,有至少一个不动点,这个事情呃,我们可以用一些呃比较直观的概念去理解,比如说我们将一张白纸给平铺在桌面上。

再将这个白纸给揉成一团,放在原来白纸所在的地方,我们会发现只要它不超过原来白纸平铺的边界,那么白纸上一定有一点,在水平方向上没有移动过,比如说下面这幅图就是一个例子,一开始啊,这就相当于白纸啊。

能说是棉被也是一样的,一开始这个棉被是平整,然后呢我把这个棉被呢变成一个杂乱的一团,再把它丢在床上,这时候棉被上必然有一个点,它的X坐标,或者说它相对于这个床的不考虑垂直方向。

它相对于床床的水平位置没有发生改变,这个结论呢说神奇其实也没有那么神奇,我们可以看第二个例子,在一张水平放置的城市地图上,一定有一个点所指示的位置,就是地图所在的位置,唉这个事情怎么理解呢。

平面上水平放置的一个城市地图上,你首先找到你所在的这个位置,大体落在什么地方,那么,比如说有一张地图,我先找到我所在的位置,大概在什么地方诶,大概在这个地方,那么这个点它是不是就是。

相当于说是从这个点到这个点本身的映射,就是地图上的这个点和这个地图上指示的,那个点,是不是在这个精度要求的范围内,它就重合了呀,如果你才希望更精细的结果,你只需要把这局部的地图再给放大一点看。

然后你再去找你在哪,对不对,你总是能找到,这样取极限之后,你一定会找到那个指示的位置,就是地图所在位置的那个点,你再看一个定理叫毛球定理,这个定理听起来名字怪可爱的,它其实是庞加莱霍普夫定理的一个推论。

庞加莱霍普夫定理说,一个微分流形上,向量场零点的指标,等于这个微分流形的欧拉示性数,那么指标是什么意思啊,指标就是炫的个数,我们可以看右下角第一个是T等于一,说明线的个数它是一。

你看看这个点它是有有进有出,然后在这个地方形成的这个线呢,这种情况我们把它记作一,然后T等于零,这个就是一个没有线的点,就是个没有线的点,然后T等于正一,就是在这个点附近有一个线T等于正二。

就在这个点附近有两个线,那么只要这个零点的指标不为零,就意味着零点必然是存在的,毛球定理就是说,球面上的连续的切向量必然存在零点,它是上面这个定理的直接推论,为什么呢,因为一个微分流形下。

这个微分流形是个球面,球面上向量场零点的指标,等于这个微分流形的欧拉示性数,球面的欧拉示性数是多少,是二,我们刚刚已经说过了对吧,球面的欧拉示性数是G等于二,所以球面上它的一个连续的切向量场。

必然存在零点,或者我们用一个直观的概念去理解一下,就是说一个稠密的毛球,就是一个长满毛的球,我们没有办法用手把它抚平,一定会有一个地方你抚不平,他还是戳出来的,不信的话。

大家可以自己去找这样一个毛球做下实验,当然呃需要这个毛球足够稠密啊,希望这个毛球足够稠密,我们事实上这个现实生活中是不存在一个,处处都定义了毛都有一个矛,并且这个毛有一定长度的这样一个毛球。

最后呢我们来看一下这个彭加莱猜想,拓扑学里面的庞加莱猜想是说,任何一个单连通的闭的三维流形,必然同胚于一个三维的球面,注意三维的球面,其实是四维空间中一个球的表面啊,这个定理呢提出于1904年。

也就是庞加莱的1904年提出,然后他由俄罗斯的数学家在2003年证明,也就是隔了时隔100年,这个定理被证明了,这个定理的低维版,比如说二维版呢,大家可能更容易理解一些。

他说任何一个单连通的B的二维流形,一定同配于一个二维的球迷,那么我首先我既然要求它是单连通的,那它就不能是甜甜圈,因为单联通它不允许中间有洞,然后又要要求它是B的,那么它就要排它就排出圆盘。

那么一个单连通的B的二维流形,同胚于一个二维的球面,这件事情就看起来非常的trivial了啊,这个概念大家一定能理解,那么庞加莱猜想,就是说它的三维版本也是成立的,同时呢它还有个进化版。

就是任何一个单连通的B的N维流形,一定同配率一个N维的球面,那么这个事情呢到现在为止还没有被证,好,以上呢,就是我们今天关于这个拓扑的这方面的一个,简要的介绍,然后呃今天这节课讲完以后呢。

我们整个games001系列的课程也就到此为止了,然后之,今天本次课程因为只是一个普及性的课程,所以我们没有作业,而之前布置了作业的相关课程呢,啊我们助教团队也在紧锣密鼓的开始批改了。

然后之后批改呢会通过公众号和QQ群,向大家呃告知作业的情况,然后呢呃作业可能会呃,应该会给大家一个标准答案,然后也会看到大家自己各自的这个,每次作业的呃情况如何。

然后会按照我们在这个呃课程开始之前的安排,对于呃作业做的比较好的同学呢,到时候我们会有一个证书和一些小礼品,然后同时也会在games的官网上公示啊,以上就是我们本学期课程的相关内容。

然后呃欢迎大家在QQ群里面继续交流,和图心协和数学相关的知识。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

GAMES001-图形学中的数学 - P2:线性代数基础(二) - GAMES-Webinar - BV1MF4m1V7e3

今天我是换了一个设备一个小话筒。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以应该比上周的收音要好一些,然后我们还准备了一个手写板,因为这周会有一些推导方面的内容,所以用手写板的话比较用PPT充当一个黑板的功能,然后上课之前我们先有一些课前的事情跟大家交流一下。

第一个是纠正一下上次课程中的我的一个口误,就是上次提到的腰症变换,腰症矩阵里面的腰症指的是单位正规,就是这里的正指的是正规,或者是正交它其实不宜理解为正定,因为正定和正规并不是一个意思。

然后第二个是关于我们这个课程的定位,然后这些课给大家重新重新一下,就是首先我觉得我们这个课它的意义不在于说让大家把每一门,就是我们课上要给大家讲的数学内容全部从头到尾的讲,我觉得那样是不现实的。

其实我们更多的是希望能够通过这样一门课,让大家对图形学大概设计到哪些数学,哪些数学里面的哪些概念比较重要,这个事情有一个提纲切领的认识,当大家之后在真的学习科研工作当中用到这些知识的时候。

可以就通过我们这个课程当做一个索引去接触那些,真正的比如说一本书一样去介绍的这样一门数学课,所以这个课定位是这样,所以有可能会出现某些地方它讲的,可能会大家觉得比较快,然后没有办法从头到尾的跟下来。

但是我觉得这个事情它依然是有意义的,然后另外就是我觉得GAMES课程它其实是一个共创性质的课程,就是我们第一次以这样的形式开这样一门课,肯定会存在很多方面的不足,然后也欢迎大家批评指正。

然后如果大家有更好的,就是对于我们这些同名课程有自己更好的建议,或者是更好的这样的上课的组织方式的话,也可以向GAMES官方提出申请,然后之后可以由大家来开GAMES001的第2版,第3版这样。

然后我们一起维护中文的图形学社区,然后第3就是大家上周应该也已经看到了,就是关于GAMES002课程的广告也已经发布了,然后可能有一些同学对GAMES002要达到什么样的目的,还有一些疑惑。

然后我这里可以帮助大家做一些解答,002不是我讲,但是就是002课程的提出建设这个过程里,我也有参与就是关于为什么要有这样一门课,因为其实我们在北大开设图形学的过程当中,会发现就是即便是北大的本科生。

在一些图形学的应用程序工具的掌握上,大概是大二大三的同学吧,也依然存在一些不足,就是每次当我们当助教的时候,然后可能要手把手的教大家如何配置环境,就是会有很多同学问,那么这个东西为什么会出现这样的问题。

那个东西要怎么安装,其实我觉得图形学相比于计算机科学的其他方向,它有一个显著的特征就是,需要配环境,而且有数不清的环境需要去配,所以就是我觉得配环境可能是每个搞图形学的人,不得不掌握的技能。

所以如果有这样一门课能够专门的去,讲一下关于图形学的工具,有哪一些推荐,然后掌握到什么样的程度,我觉得也是帮助大家快速的上手图形学一个很重要的过程,大家对002课程有什么疑问。

我可以尽我所能现在回答一下,有同学问说环境限定操作系统或者编程语言吗,是不限制的,我们在这段时间的,在北大开设图形课的历程当中,我们发现其实很多问题就来自于,大家每个人用着不一样的操作系统。

然后其实我们比如说我们每次准备材料,我们可能会主体是在Windows系统上整理的,因为我们觉得图形这门课它跟别的一些计算机的,子页域不一样,它是反而是在Windows系统上最容易开发的这样一个。

就是领域,然后但是会有同学他就是抱着Mac的电脑来,然后他就问你为什么在他那个地方装不了,所以我们的解决方案就是我们所推荐的工具,基本上都是很容易做到跨平台的。

然后我们推荐的代码的方式也是以跨平台为我们的宗旨的,对所以应该是不要求的,就比如说OpenGL,可能大家真的在游戏开发线OpenGL已经跟不上时代了,然后大家会选择用Vulkan或者是Direct3D。

那么D3D这东西它就是只支持Windows的,然后如果你是用OpenGL的话,那么只有Windows和原生的Linux系统是支持OpenGL的最新版,应该是4。6的。

而Mac对OpenGL的支持是停留在4。1版上,然后Mac有一个自己的专属的图形的API叫Metal,但是这个东西的普及率实在是有点堪忧,然后Vulkan的话很多人都会说是下一代次时代的API。

但是Linux和Windows原生支持Vulkan,但是Mac的Vulkan实际上是实现在Metal上的,它的性能也会打一定的折扣,所以其实你让我从原则上,就是从个人的感情上推荐的话。

我是不建议用Mac来开发图形的,但是真的就是Mac的市场占有率还是比较高的,确实有很多同学会用Mac来学习图形学,所以我们就是在准备,比如说我们每次开课在准备Lab的时候都考虑了这一点。

这些就是002需要去跟大家讨论的内容了,上次我也没有摄像头,好吧,那关于002的课程咱们就这样好吧,我们就话不多说继续上周我们没有讲完的课程,大家有关于002的问题也可以在这里留言,我们都可以看到。

上次我们是讲到,矩阵分解这一节,然后我们今天就来看一看图形学当中,涉及到的矩阵分解方式究竟有哪几种,首先最简单的一种分解就是PLU分解,然后什么叫PLU分解,它其实所有的矩阵分解基本上都等于说。

一个矩阵等于若干个矩阵相乘,然后所谓PLU分解,就是在一般意义上我们称为有PL和U三个矩阵去分解,这个麦克风的声音来看看能不能调大一点,这个从LU分解。

PLU分解它就是说我们的矩阵可以分成这样PL和U三个矩阵,其中P称为初等变换矩阵,而L是下三角矩阵,U是上三角矩阵,我们如果像右边这幅图这样,如果能把矩阵分解成这样的三个矩阵相乘。

这样的分解方式我们就称为PLU分解,那么我们来举一个例子,比如说如果我们有这样的一个矩阵,就是A=960,然后这里是654,然后3 4 10,这样的一个矩阵,它的PLU分解是怎么去做呢。

我们可以这样去想象,首先我们将这个矩阵的第三行乘以三,然后减到第二行上去,我们就会得到A0矩阵,A0=960 0 1 4 3 4 10,我应该没有抄错系数吧,对应该没有抄错系数。

是说把第一行乘以-2/3加到第二行上去,我们可以把这个变换矩阵写出来,它等于100-2/3 10 001,就用到A矩阵上去,这样我们就得到A0,那么得到A0以后呢,我们还要继续对上面的式子进行还原。

然后这次的做法是我们再将第一行乘以-1/3加到第三行上去,这个结果是什么呢,是A1=960A,A1=960A,A1=960A,然后我们可以记这个东西是什么呢,我们把它记为=11A0。

或者或者我把这个11的形式给出来,这边这个矩阵我们叫它10矩阵,然后这个矩阵呢,它是100 010,然后-1/3 010,这个给它作用到A0上去,这个矩阵我们叫它11矩阵,然后呢。

它就只剩我们我们就是在做高斯敲蜻蜓,就是在做高斯敲蜻蜓,A2它就等于继续还原,它等于960 014 002,它可以写成是100 010 0-2 1,然后我们把它作用到A1上去,这个矩阵我们叫做A2矩阵。

然后我们把所有的式子都写在一起,就会发现我们刚刚干了一个什么事呢,就是U等于A2,它等于A2等于12A1,而A1等于11A0,A0等于10A,所以这个就导出什么,导出L,对。

就是A等于12乘以11乘以1,就是A等于12乘以1乘以0的逆再乘以U,然后这个得到的就是L,这个就是L,因为这里的1211和10,它们本身都是下三角矩阵,然后我把下三角矩阵乘在一起。

它也依然是下三角矩阵,然后再对它取逆也是一样的,总之我们最后会得到这个通过高斯敲蜻蜓,每组高斯敲蜻蜓,如果我们把变换矩阵给存下来,变成到一起再取逆的话,它就会得到一个下三角矩阵。

所以每一个高斯敲蜻蜓就等于,等价于一个LU分解,那么这里的P是什么呢,我们可以看到刚刚整个变换过程当中,我们只涉及到,把某一行乘以一个数,加到另一个数另一行上去,但并没有涉及到说。

我们把其中矩阵任意两行,给互换这样的操作,但有时候我们为了数值的稳定性,比如说我们希望主源尽可能的大,然后这个条件数尽可能好,或者类似的理由,我们还会希望在前面去成一个变换矩阵,去把某些行给交换。

然后这个时候就会多出来,这个置换矩阵P,所以高斯敲蜻蜓,总归意义上说它是一个PLU分解,然后如果你不进行换行的操作的话,它就是一个LU分解,这个就叫PLU分解,然后用LU分解来解方程。

我相信大家都明白是怎么回事了,其实它就是等于我们用高斯敲蜻蜓去解了一个方程,我们来清除一下,然后第二个分解是乔里斯基分解,乔里斯基分解是把一个矩阵分解成,它本身再乘以另一个它本身的转制,或者再复述一下。

就是它本身的R转制公额矩阵,然后乔里斯基分解是有一定的条件的,它不像LU分解,我们只要是在任何一个方阵的情况下都可以做,而乔里斯基分解要求我们这个方阵,它得是一个十对称的镇定矩阵。

在这其中L也依然是一个下三角矩阵,那么L的转制公额它显然也是一个上三角矩阵,所以它跟LU形式上是一样,形式上都等于说是一个下三角乘以一个上三角,但不同之处在于乔里斯基分解的上下三角矩阵之间。

还互为转制公额的关系,好 那我们看一下乔里斯基分解的示例,比如说连矩阵是4 12 -16 12 37 -43,然后是-16,就是这样一个矩阵,然后这个矩阵我们不加正名的给出,它等于下面这两个矩阵的成绩。

矩阵的成绩,然后是-16,它等于这样的一个矩阵的成绩,还可以验算一下它应该是对的,然后乔里斯基分解要怎么去求呢,因为这个乔里斯基分解它本身是具有,可以把一个n阶方阵的乔里斯基分解的问题。

归约为一个n-1的方阵的乔里斯基分解的问题,所以通过这样的方式,它有一套自己的算法去求乔里斯基分解的方案,然后因为具体的求法,其实在图形学应用当中,大家并不需要过多的关注,大家基本上绝大部分情况下。

都是给定一个方程让你去解,然后你这个时候要想到用乔里斯基分解去解,所以一般情况下是这样的一个状态,遇到这个乔里斯基分解,然后乔里斯基分解的好处和LU分解是一样的,就是它们的差别在于复杂度。

LU分解因为等价于高斯消阴,一般来说求解的复杂度是在n三方的级别,n是矩阵的阶数,然后乔里斯基分解因为它的一些很好的性质,比如说实对称这样的性质,使它可以归约为此问题,所以它的复杂度是n平方的一般来说。

所以这个求解的复杂度就直接降了一级,然后当我们拿到一个,不管是LU分解也好,乔里斯基分解也好,我们可以将这个解方程给简化,比如说A矩阵它等于L乘以U,有路波有路波,这个路波会在上完课的几天之后。

可以在B站上看到,然后我们要求解方程ax等于b,这时候我们可以将LU来代替A,然后写成x等于b的形式,然后我们又可以把它写成L乘以Ux等于b,所以我们可以先拿一个下三角矩阵去解出ly等于b出来。

所以我们就会得到Ux等于y,然后这样我们就可以解出x,它归根结底就是这样一个过程,然后如果是乔里斯基分解的话,其实一样的,你直接把U给转换成L转制就可以了,这个就是矩阵分解的最简单的两种情形。

然后稍微麻烦一点的两种,第一种是QR分解,QR分解是一个对矩阵几乎没有任何要求的分解方式,你看这里它要求是m乘n只要它是列满制的,那么我们这个方程就可以做QR分解。

分解结果我们会首先分解出一个L乘以矩阵,然后再分解出一个上三角矩阵,然后这时候因为m它有可能和n不相等,当m大于n的时候,这个R的下半部分就是0矩阵,因为它上三角嘛,上三角以下部分就都是0。

然后QR分解有很多种方法去计算,比如说式密特征交换啊,这个Givens变换或者Householder变换之类的,然后它的应用也是和乔里斯基分解类似的,然后是求解稠密的矩阵方程所需要应用的东西。

然后特别的就是如果大家知道,在我们做软体仿真的时候会遇到形变梯度这样一个概念,我们形变梯度一般来说会把它分解成RS,其实一样嘛,当然这个R就对应于这里的Q,然后这个S就对应于这里的R,它意思就是说。

比如说我有一个软体,然后这个软体发生了一些变化,然后我现在把这个变化里面的旋转部分给提出来,那么剩下的部分才是真正的变化,才是真正的软体的变形,因为软体的变形如果它全是旋转部分的话。

它其实对应的就是钢体,它其实就变成一个不能进行形变的这样一个固体了,所以只有剩下的这个部分S才是真正的软体的形变,QR分解一般来说它的作用就是这样,然后我们可以简单地看一下,用最暴力的方法。

就施密特正交化是怎么去做QR分解,其实大家不掌握也没有太大的关系,这就是一个最简单的概念,大家有一点印象就可以了,(画面中),原来是给出一个矩阵,然后这里给的矩阵是122212121。

好 是这样一个矩阵,然后我们先对它做施密特正交化,施密特正交化大家现在应该都学过,我就不在这里赘述了,首先会得到B1=A1,A1就是它的第一列,等于直接拿到等于121,然后B2=A2-B1=1-1。

然后B3=A3-1/3B2-7/6B1,这些系数都是点程算出来的,等于1/2-1/2,这样就拿到B1 B2 B3,也就相当于拿到Q,这个还没有做正交化,但如果我们再做一下它的正交化,就是皈依化。

如果我们再做一下皈依化的话,就会直接得到Q=1/6,然后2/6,1/6,我们直接把B1皈依化拿过来,然后这个是1/3-1/3,然后是1/3,然后1/2 0-1/3,就直接得到Q矩阵了。

也就是做Smith正交化就会得到Q矩阵,然后R矩阵呢,R矩阵其实是这么得来的,就是刚刚我们在做正交化的过程当中,我们不是有一些系数吗,首先是皈依化系数,我们把皈依化系数抄在中间。

然后是刚刚计算这些单位向量的系数,然后这就得到了R矩阵,这R矩阵算出来的结果是√6,7/√6,然后√3,1/√3,1/√2,这样就得到这个QR分解。

其实QR分解最暴利的计算方式就是直接做Smith正交化,然后整个流程大概就是这样,然后在QR分解之外呢,最后一种也是可能不管做CV也好CG也好,大家都不得不去接触的这样一种矩阵分解方式,就是奇异值分解。

然后奇异值分解一般大家都会把它简称为SVD,这个SVD其实就是奇异值分解,它的一个缩写,所以如果我看到有人说SVD分解啊,然后这其实就语义重复了,所以我们一般就称为奇异值分解或者SVD。

然后它分解的三个矩阵,一个是U矩阵,然后一个是Sigma矩阵,然后一个是V矩阵,V矩阵一般在形式里出现,我们会用V转制的形式出现,然后它对于任何矩阵都是可以去求的。

甚至不要求这是一个列满值或者行满值的矩阵,然后其中呢,我们可以看到第一个U矩阵它要是个优正矩阵,也就是我们可以把它理解为一个,再述一下就是旋转矩阵,这是一个旋转矩阵,然后这也是一个旋转矩阵。

就是说这里以它的转制的形式出现,然后中间是一个对角矩阵,这样一个过程就是SVD,一般呢,我们将对角矩阵当中这个对角,所有对角元都称为奇异值,然后这里的奇异值它们都是非负的。

右边给的这幅图是关于SVD的一个示意图,我们一开始这个矩阵它长上方这个样子,然后这M这些图是网上copy的,我们可以把这个理解为A,然后这样一个矩阵我们先做一次旋转,也就是这个V转制所对应的旋转。

它会将这个红线和黄线进行,就是整个圆做一个旋转,转到这样一个程度,然后我们去做这个Sigma,Sigma它的意思是,在沿着现在的每个轴去做缩放,也就是scale,然后缩放之后结果就是右下角这样。

你们可以看到它相当于是在这个X方向,做了拉伸在Y方向做压缩,然后最后我们又对应了一个旋转的变换,把下面的这样一个图形,又给变换到最上方一个图形,然后这些操作的写到一起,就是直接一个A过去的结果。

然后它等价于先旋转再缩放再旋转,然后这个过程就是SVD,然后SVD有一些比较特殊的情况,就是因为大家其实在学现代的时候,都学过的概念叫特征值,因为我们之前上节课也回顾了,什么叫特征值。

特征值是所有让它满足,这个AX等于λX的,这样的实数我们叫它特征值,但不一定是实数,只是在实数域下我们这样去看,那这样的数我们叫它特征值,然后而这个奇异值是做SVD分解之后,中间的这个对角矩阵的对角元。

那么这两个值它们之间有什么关系呢,我们可以这样去看它,就是如果当m和n是相等的时候,然后我们将A矩阵的转制和A矩阵乘到一起,然后再对它开根号,当然这个开根号是形式上的,我们也可以把这个根号给写出来。

它其实意思是什么呢,就是我们把A等于uσv转制这个等号,给它写进去,把每一个A转制也给写成v×σ转制,σ转制就是σ本身,然后再乘以u转制这样的形式,然后因为u转制乘u它是单位矩阵,所以就消掉了。

最后我们就会得到v×σ^2×v转制在开根号,那么这个东西就等于v×σ×v转制对吧,然后v是什么,v是一个旋转矩阵,v转制是这个旋转矩阵的逆矩阵,然后中间剩下的这个东西它就是特征值。

因为如果你能够把任何一个矩阵通过相似变换,变换成只有对角矩阵的话,那么这个对角元就会对应一个特征值,所以这里给出的结论是说,当A为实对称镇定矩阵的时候,特征值与奇异值是重合的,因为只有在实对称镇定矩阵。

你才能用一个正交矩阵去进行对角化,这个是我们之前回顾,上一课大家回顾的这样一个概念,就是实对称镇定矩阵可以被正交矩阵通过相似变换,得到一个对角矩阵,所以此时的特征值与奇异值是重合的,对 当然换句话说。

这个就告诉我们,如果它不是实对称镇定矩阵的话,它特征值和奇异值可能是不一样的,这个时候是游戏需要小心的情况,好 讲完了矩阵的分解以后,我们继续去探讨线性代数里面,没有涉及到的一些矩阵的概念。

比如说向量与矩阵的范数是如何定义的,然后我们上节课其实已经说过了,这个范数它在英文上就是norm 对吧,或者说它就是母,这是一个东西,然后我们定义范数,首先是在向量上定义向量范数。

然后我们再将向量范数给推广到矩阵范数上,所以我们就先来看这个向量范数,模是什么模,就是对长度的一个度量,首先我们来看L0范数,L0范数它是说一个向量,它的L0范数等于其中非0元素的个数。

我们把它记作L0,然后L1范数是一个向量,我们把它每一个分量的绝对值相加,这个得到的叫L1,L2范数是大家最熟悉的一种,是我们将一个向量,它当中的每一个元素的平方相加,再开根号,这样得到的是L2范数。

我们又将L2范数称之为,欧基里德范数或者是弗洛比姆斯范数,然后这个手写笔它不太听使用,我们总结一下,L1和L2都可以写成是将x1的p次蜜,sigma起来,然后再除以,不是再除以。

再开这个p次方根得到的结果,所以我们如果p趋向于无穷会得到什么,p趋向于无穷就会得到,x无穷等于整个矩阵当中元素的最大值,这个事情其实就需要用分析去证明了,它不是代数角度的事情,大家高数课应该都学过了。

就是x1除以x2的p次蜜,当p趋向于无穷的时候会发生什么,如果x1<x2就是0,如果s1>x2就是无穷,然后如果s1=x2是1,其实我们就是利用了这个结论,定义为L无穷的范数,上节课我们其实回顾过范数。

就是要满足的性质,范数它是定义在一个结合上,然后我们希望它能够满足,正定性正其次性和三角不等式,就是矩阵范数需要满足这三个性质,正定性是说任何一个向量的程度是大于等于0的,而且非0向量的程度是大于0的。

正其次性是说我在一个向量上去乘以一个时数,然后我得到的新向量的范数,要等于原向量的范数乘以时数的绝对值,然后三角不等式是说a+b的摩长,要小于等于a的摩长加上b的摩长,这个叫三角不等式。

然后我们可以验证一下,其实L0范数是不满足这三个性质的,而且它好像一条都不满足,对吧,因为它只是L0范数只是对一个向量当中,非0的个数的度量,所以事实上L0范数它不是一个真正的范数。

因为它不能构成一个度量范数,所以我们在说L0范数的时候,其实一个概念性的称呼有一个L0范数的存在,它本质上不是范数,比如说我们什么时候用到范数最多呢,在这个机器学习的时候。

我们会定义一个objective function,然后它可能是等于,它可能是等于某一个向量和另一个向量的相减,然后求它的摩长,如果你采用的是,这个L0范数的话,它的优化效果是很差的,为什么呢。

因为其实就是它其实本质上不是范数,它不可导,就是当你某一个元素的值改变的时候,整个向量的摩长并不会随之立刻发生改变,所以它的优化目标,作为优化目标的性能是非常低下的,有了向量范数。

我们才可以去定义矩阵范数,矩阵范数和向量范数是一样的,如果说向量范数是,是有一个向量的集合,然后它的一个程度的度量的话,矩阵范数是一样的,你如何理解矩阵范数,就是我们用了一个时数去表达,一个矩阵的大小。

就矩阵,大家可能不知道矩阵的长度是什么东西,但我们可以把矩阵范数理解为,一个矩阵集合,然后它上面的每个元素都有一个大小,这个就是矩阵范数一个直观的理解,然后我们怎么去定义这个大小呢,首先,第一种。

其实有很多种不同的定义方式,然后第一种定义方式就是诱导范数,诱导范数的矩阵范数,是和向量范数是严格上统一的,它定义是说,一个矩阵的范数,它等于这个矩阵,作用在任何一个向量上,所求得的最大的范数。

所求得最大的向量范数,要求这个向量的摩长等于,或者我们如果在向量摩长不等于的情况下,就是求出这个,矩阵作用在这个向量之后,得到的向量的范数除以原向量的范数,然后我们把这个,比值的最大值记作矩阵的范数。

刚刚我们讲过向量的LP范数了对吧,所以我们用矩阵,用向量的LP范数,就可以直接得到矩阵的诱导LP范数,然后它的定义就是像这样,然后从这个几何意义上说,如果我们给出如上的,这样的诱导范数的定义的话。

其实A它的几何意义就更加明显,它是作为先进变换的时候,产生的对向量摩长的最大的放大倍数,我们直接解读这个式子,它就是说存在某一个向量,然后这个矩阵作用在这个向量上。

会使得这个向量变成一个摩长非常大的向量,然后它们两个的比值,其实就是A产生的最大的放大倍数,然后既然是诱导范数,它和向量范数要是相容的,这个相容性是什么样呢,它其实是说,A矩阵作用在X向量上。

得到的新向量的范数,它要小于等于,A本身的范数乘以原向量的范数,而这个事情其实可以直接用定义去证明,因为X比上X是小于等于,对它求max的,而求max的定义是矩阵的范数,所以我们把它换一下位置。

就会得到上面这个数,所以诱导矩阵范数的相容率是很容易证明的,然后有几种常见的诱导矩阵范数,第一种叫诱导矩阵L1范数,然后它得到的结果是,A的所有列向量的最大绝对值的和,就是A的所有的列向量。

我们可以看到这里先把列固定了,然后对每一行求和,求和之后看谁最大,得到的结果就是矩阵的诱导L1范数,然后矩阵的诱导L2范数,得到的是A的最大奇异值,刚刚我们已经定义过奇异值了,所以该范数又称为普范数。

为什么,因为我们一般会将某一个矩阵的最大奇异值,这个东西叫做它的普范进,然后A的无穷范数和A的E范数,它是正好对应的,刚刚我们求的是所有列向量的最大绝对值和,然后现在求的是所有行向量的最大绝对值和。

这是一道作业题,如何去证明左边这三个事情,好,刚刚我们说的是诱导范数,而矩阵除了从向量诱导得到范数以外,还有另外两种范数的定义方式,第一种是直接基于矩阵的元素形式去定义范数。

那么我们这里又会称作L级范数,大家约定俗成就喜欢这么说,所以得区分一下究竟是用哪种方式定义的范数,然后元素形式范数可以理解为,我们把矩阵先降为成向量,然后直接使用向量的LP范数去定义矩阵的范数。

比如说有个矩阵是有个2*2的矩阵是长这样,那么它的范数呢,我们又把它写成这个向量的范数,它干了这么一件事情,它其实也可以看成是用向量范数给定义的东西,但它更暴力一些,它其实会忽略了很多矩阵的。

因为它有行有劣所带来的信息,那么第一种就是A1,矩阵的A1范数是直接求它每个元素的绝对值和,然后第二种是A2,F2其实就是Flow of Unions或者是欧几里德,或者是舒尔范数或者是LR范数。

都是这个东西,它指的是将矩阵的每一个元素先求平方,然后取它们的和再开个号,然后这个东西它等价于Trace A转至A,这个怎么证明其实是很容易证明,就直接验算一下就可以了,然后矩阵的无穷范数是一样的。

跟向量的无穷范数一样,就是我们求它的每一个元素的最大绝对值,这个就叫L无穷范数,然后在这个优打范数向量元素形式的范数以外,还有一种shutting范数,它是一种不随腰正变换而改变的范数。

如何做到这一点呢,因为我们知道腰正变换是不改变起义值的,所以shutting范数其实就是相当于定义在矩阵的起义值上的范数,第一种定义方式,就是A1是它起义值的和,这个范数我们称为和范数。

然后A2和上面的这个是等价的,这两个是一样的,然后A无穷它和普范数是一样的,然后为什么是这样定义呢,因为shutting范数其实相当于我把起义值给写成一个向量,就是我写成一个向量。

长sigma1 sigma2一直到sigman,然后我求这个向量的L1范数,就是矩阵的shutting1范数,然后求这个向量的L2范数,就是矩阵的shutting2范数,以此类推,这些性质都还挺有意思。

而且不是非常难去证明,我们希望大家,这应该也是一道作业题,我现在就证明这个事情,它应该也是一道作业题,然后第三个关于矩阵部分的线性代数的实义,是矩阵求导,这个其实在科研当中经常用到。

但是我们的现代课程并没有去补充这部分的内容,然后矩阵求导在图形学当中的应用,我个人总结是,以下两点,当然这是诱于我的学术领域所带来的,它本身的应用远远不止这两点,第一点是在伴随方法中。

就是adjoining method,它去求某一个物理量,相对于初始参数的导数,比如说一个,我举一个高中物理的例子,一个斜抛运动,斜抛运动的参数,一个是抛角,一个是初速度,初速度是个向量。

然后在若干时间以后,它会落在某一个位置,这个位置可能会是一个高度,然后我想求高度相对于初始参数,它的一个偏导数,然后我们的伴随方法,adjoining method,它就是求解这个问题的。

只不过我们现在遇到的问题,比起高中物理要复杂得多,我们的初始参数不仅是θ和v0两个,我们得到的东西也不只是高度这一个,这个时候我们就其实,在这个过程当中就会遇到矩阵求导,第二个应用是在软体缝阵当中。

给出势能函数求它的应力张量,就是我们会得到一个,会给大家一个这样的形式,这个叫hyperelastic function,超弹性,然后这个是弹性势能,这个Psi这个函数给定的叫弹性势能。

然后F这个它叫形变梯度,这是一个3×3的矩阵,然后弹性势能是一个标量,然后我们会需要去求它的皮欧拉stress,等于偏Psi比偏F,然后这是一种应力张量。

从这个皮欧拉stress可以得到柯西stress,然后从柯西应力张量,我们又可以直接去求出弹性力,整个流程是这样,所以可以可见其中通过,左边的弹性势能函数去求皮欧拉stress,这个过程是很关键的。

这个过程就是一个矩阵求导,以上是矩阵求导两个比较,我个人会用到的应用版,在讲矩阵求导之前,我们先要讲关于矩阵求导的布局,矩阵求导有两种布局,第一种叫分子布局,第二种叫分母布局。

然后它求出来的结果是不一样的,比如说F和X现在它们都是向量,然后F是一个2×1的向量,X是一个3×1的向量,也就是大家都是列向量,然后所谓分子布局,就是我们拿一个列向量去,对一个行向量求导。

这个过程就叫分子布局,因为此时分母转质了,求出来的结果是一个2×3的矩阵,然后另一种求法呢,是我们将一个行向量,对一个列向量求导,这个时候分子转质了,然后求出来是一个3×2的矩阵,所以如何去记忆布局呢。

谁转质就不是谁的布局,分母转质了就是分子的布局,分子转质了就是分母的布局,这个就叫矩阵求导的布局,然后从本质上说,m个边缘的矩阵,对n个边缘的矩阵求导,所得的结果都是m×n个边缘,因为它们都是线性的。

也就是说F有多少个未知数,X有多少个自由度,它每个都得求一遍,你不管是用哪一种布局求导,求出来都相当于要算偏Fi比偏Xj,每一个都少不了,但是区别在于,所得的结果是按什么规则排列的,是不一样的。

左边我们得的是一个2×3的矩阵,右边得的是一个3×2的矩阵,这个事情大家必须时刻注意到,你当前所用的是一个什么布局,如果你混用不同的布局,最后就会发现,你矩阵求导求出来的中间量,没办法乘在一起了。

因为它们成了一个,不相容的矩阵乘法,然后我们从这个简单到困难的顺序,来讲一下,不同矩阵函数求导的方式,然后第一个案例是,向量边缘的实质标量函数,也就是说J的F是实数,Rx是一个向量,这里的向量。

我们一般都默认它是列向量,然后我们一般对向量边缘的,实质标量函数求导,我们是选用这样的布局方式,也就是我直接将一个向量给写成,一个标量堪称对向量的,每一个元素求偏导,然后过程最后再组装成一个列向量。

它是这样一个形式,然后向量边缘的实质标量函数求导,它有一些比较重要的运算法则,第一个是如果标量函数是个常量,就是说不管对,那你不管发入任何的向量,它都会得到这个成数,所以它的求导就是0。

然后第二个是线性性,就是如果F和G都是实质的标量函数,那么C1FX加C2GX再对X求导的结果,是C1乘上F对X求导的结果,加上C2乘G对X是求导的结果,然后是乘法法则,因为F和G都是标量。

所以乘法法则也很简单,它和我们学过的就是未知分里面的概念是一样的,就是F对于X求偏导,这个得到的是一个列向量乘以一个G,G是一个实数再加上一个实数乘以一个列向量,最后得到一个列向量,然后除法也是类似的。

因为你的F和G都是实数,所以其实根本就什么都没有变,什么都没有变,形式上完全没有变,你的G^x仍然是一个实数,所以你可以把它直接放在最外面除掉,然后向量变的实质标量函数的常用公式是,第一个是。

我们首先要给出定义,我们定义A和B都是n阶的列向量,是常数向量,然后n乘n是n阶的常数矩阵,A是n乘n的常数矩阵,然后第一个结论是,X转制乘以A或者是A转制乘以X,其实它对应的都是内基对吧。

然后我们内基得到的就是一个标量函数,这个标量函数对于其中的边缘X求偏导,得到的结果都是那一个不边缘A,这个验证是很容易的,它只要把定义全部都写出来,就很容易得到这个结果,然后第二个结论是。

X转制和X相乘,也是得到一个标量函数,然后这个标量函数对于X求偏导得到是2X,这结论如何去记忆呢,其实它就是将上面的这个X转制A和A转制X,你可以把它看成一个是边缘,另一个是常数。

其实可以把它看成是这个,就是A等于X,然后第三个结论是,X转制乘上这个常数矩阵A再乘以一个X,然后它对X求偏导得到的是AX加上A转制乘以X,这个也可以直接去验证其结果,相对来说还比较简单。

然后比较复杂是下面这个事,然后就是A转制乘以X,然后再乘以X转制再乘以B,然后它对X求偏导,这个求偏导的结果是,A乘上B转制乘以X,加上B乘上A转制乘以X,这个证明就比较复杂了。

然后我就不在这里告诉大家大概怎么去理解,反正这个结论也比较重要,之后会跟大家说一下,如何去计算矩阵求导,如何用比较简单的方式去计算矩阵求导,然后我们现在再来看矩阵边缘的实质表现函数。

刚刚我们的函数返回的值都是实数,但是函数接收的东西不一样,刚刚是向两下变成矩阵,现在是矩阵边缘,矩阵边缘我们首先定义这个矩阵,然后一样就是我们如果求F,F对于它的变量X是一个M。

作为一个M乘N的矩阵的偏导数的话,就相当于每一个F对于X的每一个对应的元素求偏导,然后再把它按照矩阵的形式组织起来,然后运算法则跟刚刚几乎没有区别,因为我们仍然F本身它仍然是一个实数。

所以它是不会影响我们运算法则的,这个运算法则是线性法则是成立的,乘法法则是成立的,除法法则是成立的,它们都是成立的,然后这个时候矩阵边缘的实质表量函数的常用公式,和向量边缘就不一样了。

因为我们毕竟它的自变量不一样,自变量不一样的话,第一个我们来看,当A是一个M阶列矩阵,B是一个N阶列矩阵,然后A转质乘以X乘以B,我们注意到X是一个M乘N的,所以A转质是一个E乘M的。

这样得到的是一个表量,这个表量对于它中间唯一的变量X从偏倒,所得的结果就等于把,它旁边的两个常量给写到一起来,但是要写成A的,就刚刚这里写的是A转质,这里要写成A再乘以一个B的转质,这样形式可以出来。

然后类似的就是,如果我们将上面的整个式子都给转质一下,给写成A转质乘以X转质乘以B,我们得到就是B乘A转质,这样结论就是你要正一个另一个都是显然,第三个结论也是相对来说比较困难的。

它是A转质乘以X再乘以X转质再乘以B,然后它得到了一个表量,这个表量再去对矩阵X求偏倒,然后它求出来的结果是相当于把上面两个结论用了两遍,它等于AB转质乘以X加上BA转质乘以X,然后还是跟刚刚一样。

如果我们把转质的顺序换一换,它得到的就是XBA转质加上XAB转质,这些都是矩阵边缘的实质表量函数,现在我们来看这个矩阵函数的微分,为什么要说矩阵函数的微分呢,因为它帮助我们去算刚刚我们看到的这些。

这些这个函数的求倒,它能帮助我们以一种比较简单的方式去计算,首先我们是定义依然是相量边缘的实质表量函数FX,然后它是一个N阶的列向量,那么DFX是什么呢,DFX其实如果我们把它看成多元微积分。

它就是相当于对每一个,这个向量的元素求偏倒再乘以对应元素的微分,对吧,然后这个结论大家在高等数学里都是写过的,是没有写成矩阵相乘的形式,但如果把它写成矩阵相乘的形式有什么好处呢。

这是行向量乘列向量是一个内积,然后因为它得到是一个实数,所以它就等于它的这样相乘得到的trace对吧,因为你现在是一个1乘1的矩阵,那你1乘1的矩阵的trace就是它本身,就本身唯一的那个元素。

然后我们现在再看矩阵边缘的实质表量函数,它的微分又是什么样呢,它的微分其实跟刚刚是完全类似的,我们先把这个就是F这个表量函数,对于X的这个偏倒写成一个矩阵。

然后再把这个矩阵的每一个元素的微分写成一个矩阵,我再把这两个矩阵相乘,然后求它的trace,注意到这个地方是n乘m,这里是m乘n,就是我这里相当于在求完偏倒以后,还加上了一个转制得到一个n乘m。

我们可以验算一下,它其实刚好也是等于,F对于X的每一个元素求偏倒,再乘上对应元素的微分,我们把刚刚的结论整理一下,就是,我看一下,对没错,我们把刚刚结论整理一下,给定我们一个矩阵边缘的实矩阵函数。

F是一个矩阵,就是所得到的量是一个矩阵,然后它的这个自变量也是一个矩阵,这结论会有这样定义的两个矩阵,就是音变量和字变量,然后我们可以将,这个函数矩阵,矩阵的函数,注意这里这个现在它是一个,每一个都是。

就是我直接将一个微分算子,作用到要在这个矩阵上,然后它可以写成,把矩阵中的每一个元素求一个微分,然后再把它排列成一个矩阵,就刚刚我们回忆一下上一页,上一页我们其实给定的是,它本质上都是一个实数的微分。

不管你是矩阵函数,向量函数还是矩阵函数,我们所求的都是一个实数的微分,因为这个函数本身是个实数,然后我们最终求的结果,这里都加了trace,所以得到的也是一个实数,而这个地方,这个地方我们所求的微分。

是一个矩阵的微分,所以我们最终这个矩阵的微分,得到的也应该是个矩阵,而其中的每个元素对应的是,一个实数的微分,那么它有哪一些规律呢,第一个是常数微分法则,如果是一个m*n的矩阵的话。

然后这个矩阵中的每个元素,都是不变的话,它的微分就是0,然后第二它是线性的,线性性也很好理解,然后第三个就是微分的乘积法则,微分乘积法则和之前,我们看到那些实数的求导的法则,就不一样了,因为它是矩阵。

它的先后顺序会影响它的乘法,比如说,这个我们将两个矩阵函数,f和g的乘积求微分,它得到的是先对f求微分再乘积,再加上f求微分乘以,我感觉我舌头有点打结,就这一部分确实有一点绕,但是我们可以就是。

站在一个比较宏观的角度去看,其实它等于说,就是形式上看,和我们学过的微积分里面是一样的,就是两个数相乘,它的微分等于其中一个微分,乘以另一个数,但是和微积分里不同的地方在于,它的顺序很重要。

就是如果你是对f求微分,那么不能把f写到后面去,f要写在前面,然后如果你是对g求微分,你也不能把dg取到前面去,你得仍然维持f在前,所以这里的乘子顺序是一定不能交换的,这就是微分的乘积法则。

然后这个法则也很容易推广,比如说f乘g乘以h,你就可以把它写成是,第一种是df,第二个是dg,第三个是dh,然后它顺序都是先f再g再h,这个顺序是不能换的,微分转制法则是这样。

就是这个可能是最简单的一个法则了,就是说一个矩阵函数的微分的转制,等于它先转制再微分,这个结果是一样的,我觉得大家理解这个东西,要抓住的点在于,这个函数本身是输进来什么,吐出去什么,比如说这样一个函数。

我进来的是vector,我输出的是个scalar,所以它的微分是什么,也是一个scalar,然后我们再看这里,我输进来是一个矩阵,我输出去也是一个矩阵,那你如果对它求微分,我会得到什么。

我得到也一定是一个矩阵,或者说微分,它是差分的推广,对吧,差分就是说我有一个y-x,然后我们叫它delta f,如果这个y无限靠近于x,我就叫它微分,所以微分是不可能改变,我的函数的形状的。

微分是不可能改变函数的形状,因为它其实就是函数取不同的自变量,然后只是这两个自变量非常靠近,然后我相减,得到的结果就成为微分,所以微分是不改变自变量,而不改变函数的形状,我明确的这一点。

大家就会很容易理解矩阵函数的微分,也一定是一个矩阵这件事情,然后我们为什么要说矩阵微分呢,因为我们可以利用矩阵微分来求导,比如说现在的f我们回归一个实数,这个实数函数我输进来是一个矩阵。

然后这个矩阵首先我对它求微分,它就相当于对其中的每一个边缘求微分,然后我将这个函数,以分子布局的形式,这个矩阵求偏导,它得到的是这样一个n*m的矩阵,根据我们之前看到的性质,所以很容易证明这样一个实际。

就是f这个函数的微分,它等于偏导数乘以矩阵的微分,在外面求一个trace,这个形式在大家如果说都是相量的情况下,是很容易理解的,因为一个相量的相量函数的微分,等于对相量每一个边缘求偏导。

乘以对应边缘的微分,其实对矩阵也是一样,然后我们就可以利用这个结论来求偏导,求偏导方式就是我们先求这个东西的微分,再求它的自变量的微分,然后我们看这个东西和它自变量之间的关系,然后剩下的就是偏导。

举个例子,比如说我们现在定义,我想去求dx-1是什么东西,或者说我想去求pnx-1比pnx是什么,这个形式其实大家会经常遇到,因为我们经常定义的这个标量函数里面,用到的不是x本身而是x的逆。

但我现在却要把它对x去求偏导,所以我们得拿到这个值,这拿到方式就要用到这个逆矩阵的最原始的定义,就是代数余子式的形式所定义的逆矩阵,用代数余子式的形式定义的逆矩阵是这样的。

就是我们首先可以将x的行列式值,写成x的第2行第一列的元素乘以Ai1,Ai1是这个东西删去第2行第一列所形成的代数余子式,然后把所有的第2行第2列,一直到第2行第2列全部都做完,我们就会得到行列式值。

这个是大家学行列式的时候的一种计算方式,然后它告诉我们什么呢,它其实是说,x作为一个矩阵,它的行列式值对于,其中的每一个元素x ij求偏导得到的是Ai1,也就是代数余子式,然后借助这个结论呢。

我们可以去求x的行列式对于x这个矩阵的偏导,然后这个矩阵就是因为我们对每一行每一列的元素求导,都会得到这个元素对应的代数余子式,也就是说我们如果将行列式对于x本身求导。

我一定会求出来一个由代数余子式构成的矩阵,然后这个矩阵是有定义的,在性性代数里面它就是伴随矩阵,然后伴随矩阵和行列式的关系在于,通过它们俩可以引入逆的概念。

就是x矩阵的逆等于x的伴随矩阵除以x的行列式值,好我们有了上面的这些结论以后我们再来看,dfx=Pnfx/Pnfx*dx的trace,这个结论是如何被利用过来求导,我们代入左边的矩阵的实质标量函数。

等于fx=x的绝对值,那么我就直接形成了dx=trace,然后里面是x的绝对值乘以x的逆再乘以dx,因为Pnfx/Pnfxdx=xx*=它乘以它,所以我把它写过来。

然后写过来以后可以看到因为x是个标量,x绝对值是个标量就可以提出来,提出来之后里面剩下的就是x的逆乘以dx,然后求它的trace,然后我们注意到这个x乘以x的逆,它其实是单位矩阵。

然后我们在左边的这个东西两端去求偏导,去求微分,去求微分我们整理一下就会得到dx的逆,等于-x的逆乘以dx再乘以x的逆,这样我们就求完了,我们就求出了这个行列式对于x求偏导的结果是什么。

因为我们整理了一下,发现我们剩下的这个东西就是行列式求偏导的结果,然后作为例题我们来证明一下下面这个结果,就是我们去求x转至乘以x,它的trace对于x求偏导等于2x这个结果,因为这个x转至乘以x。

它的微分我们把微分先写进去,等于先求x的微分转至乘以x,加上x的转至乘以dx,然后再求它的trace,这两个trace里面的内容,因为我们将这个转至一下,因为转至不改变g。

所以得到就是两倍的trace x转至乘以dx,或者写一下变成trace两倍的x转至乘以dx,也就是这个东西等于trace这个东西乘以dx,那么这个东西就是偏导,就是它对它的偏导。

我们都利用的是这样一个式子,对吧,就结论是什么,结论就是如果我们将任何一个式子,可以写成左边一个微分,然后右边等于某个东西的trace,这trace里面又有一个微分的话。

那么剩下这个东西就是左右两个事情的偏导,差一个转至,差一个转至啊,差一个转至,这里我们特别说明一下,这个x转至x这个式子,就是我们经常要去解这样的矩阵方程,ax-b,但这个方程是不是一定有解的。

它其实不一定有解,在不一定有解的情况下,我们希望去求得一个x,使得ax-b的模尽量的小,然后ax-b的模,如果我们取二范数的话,它其实是等于ax-b的转至乘以ax-b。

等于x转至a转至a-2b转至ax+b转至b,然后我们定义这个叫f,而我们希望这个东西最小,也就是说我们希望它的偏导等于0,这是一个对向量求导的形式,然后这个偏导根据我们刚刚给出的结论。

大家可以自己证明一下,然后这个得到的结论是,偏f-b偏x等于这个,当它取最小值的时候它应该等于0,然后整理一下得到a转至ax等于a转至b,我们把a写到右边去,也就是说我们得到了x。

在最小二乘的意义下解出了ax等于b的结果,而这里面是a,这里面涉及到了一个矩阵叫a转至乘以a,所以一个矩阵和它本身的转至相乘,这个结果是很重要的,这个结果可以被用来去求解。

它所对应的矩阵方程在最小二乘意义下的解,然后因为这个东西它形如一个逆的形式,因为如果它不是最小二乘意义,我们得到的东西应该是a-1b,然后因为这个a-1解不出来,我们才用这个东西去替代了a-1。

所以它又被称为尾逆,然后刚刚的这个过程里面,我们用到了矩阵的范数,也用到了矩阵的求导,但它这个求导其实相对来说简单一些,它其实没有涉及到矩阵函数的,就是输出一个矩阵。

它的输出仍然是一个向量而不是一个矩阵,这里的输出是个标量,这个就是矩阵求导,然后如果大家有什么不明白的地方,其实可以沿着课件上面给的这些结论去推一遍,其实就会发现这些结论并没有大家想象的那么繁琐。

其实它们都是很显见的结论,然后这些结论呢,我们之后这节课最后会给大家分享一些,如何快速地找到这些结论的工具书,然后到时候大家就变成查表了,就是不需要自己去算这个求导,你可以直接去看某一样形式的矩阵乘法。

它对于其中的自变量求导会给出什么样的结果,最后我们就到了这节课最后一个部分,这节课最后是给张亮的一些初步的知识,为了讲张亮的初步知识之前,我们先要补充一下向量的各种基,然后第一种基就是向量的内积。

向量的内积又被称为标量基,向量的标量基是说,两个向量的乘法会得到一个标量,然后它的值是向量的摩长之积乘以加短的雨线,这个大家都非常的熟悉,然后向量的向量基又被称为差基,它意思是说。

我两个向量的差基得到另一个向量,然后这个向量的方向垂直于原来的两个向量,而它这个向量的正反,什么叫正反呢,我们一会儿再说是由右手螺旋定则来确定,然后它有两个结论,第一个结论是,向量的差基的摩长是等于。

两个参与差基的向量的摩长乘以它们两角角的正弦,然后向量的差基得到的向量,是参与差基的任何一个向量的内积都等于零,然后在二维的情况下,向量的差基得到的结果是ax by-bx ay,然后这是一个实数。

在三维的情况下,它可以用行列式的形式写成,ax ay az bx by bz,然后上面是ex e y e z,然后它形式上长这样一个形式,然后所谓右手螺旋定则是说,如果我的参与差成的一个向量是a向量。

另一个向量是b向量,然后得到的这个向量和ab之间乘右手螺旋定则,如果大家将自己的手,就是手指从a往b那边,四个手指就除了拇指以外的四个手指,从a往b转的话,那你拇指朝向的方向就是它们俩差成得到的方向。

这个是差基,这样的概念大家应该都接触过,然后要区别一下,这个向量的差基和向量的外积,因为其实有很多错误的说法会认为,向量的外积就是向量的差基,但外积和差基并不是一个东西,向量的差基呢。

除了刚刚我们给的这个行列式形式以外,我们还可以用矩阵的形式给出,然后这个矩阵的形式是这个所对应的,差基对应的矩阵是一个反对称矩阵,所以反对称矩阵就是说它加上它的转制等于0。

它的形式在这个Dcard的指标系下就长这样,然后我们在图形运算当中,因为我们可能会,差基可能会是我们的这个,就是参与计算的一个很小的一个运算,然后如果我们把这个运算用,这个行列式的形式写的话。

它就不低于我们运算的统一性,所以我们一般会把用矩阵的形式写,使得整个比如说我要得到的某一个函数F里面的,东西它全都是矩阵乘法,各种各样矩阵乘法,然后各种各样矩阵乘法相加,因为,因为我们之前已经说过。

上节课已经说过,就是内积可以写成相量的转制乘以相量,然后我们等会又会说外积等于相量乘以相量的转制,所以如果我们能把内积也写成矩阵乘法的形式的话,我们的所有相量之间的积就全部都是矩阵乘法。

然后全部都是矩阵乘法,我们就可以按照刚刚才讲的矩阵求导的法则去求导,这件事情非常的好,就是我们能建立一个很统一的表达形式,相量的外积,刚刚其实已经说了,就是我们将这个相量作为一个列相量。

我们把列相量写在前面,把它的把横相量写在后面,这应该是个B,把横相量写在后面,然后结果就相当于说是,这样一个列相量乘以这样一个横相量,是等于它们的每一个元素分别相乘,然后形成一个矩阵。

XBX SBY SBZ AY BX AY BY AY BZ,这样会形成一个矩阵,然后我们可以观察一下它的对角元,是AX BS AY BY AZ BZ,也就是说外积的trace正好等于内积。

这个是相量之间的外积,有了内积外积和X积之后,我们来看到底什么叫张量,我觉得张量其实它是理解,这个矩阵和相量的运算的一个,更本质的这样一种表示方式,因为我们平时在说矩阵和相量运算的时候。

如果我们用它来表示线性空间的话,相当于基底已经给定了,但是张量的时候我们就会显示的感受到,基底这个东西是很重要的,它一直在参与我们的运算,而不是被我们忽略的,然后它能帮助我们更清晰的去理解。

线性空间以及线性运算的,它们的本质到底是什么,然后说到张量,我们一般会有斜变和逆变的概念,斜变和逆变的概念,是针对张量的分量而言,在相量空间当中,因为基底是人为给定的,所以这个相量本身是本质的。

相量本身是无所谓斜变和逆变的概念,就相量就是一个确切的东西,然后什么是斜变逆变,其实我们把相量写成分量的形式,才会出现斜变和逆变,比如说三维的O式空间当中的位移X,我们把它写成。

沿着E1这个基底方向的大小为X1的位移,加上沿着E2这个方向的大小为X2的位移,加上E3这个方向的大小为X3的位移,如果E2的摩长增大了,那么坐标XI相应的会减小,所以XI是逆变的。

就是如果它的基底是增大的,基底的摩长增大,这个数反而会减小,所以它是逆变,然后如果EI的摩长增大,那么这个X在EI方向的投影的摩长,反而会增大,这不是投影,就是X这个相量和EI的点击,反而会增大。

所以它就是斜变,也就是说某一个东西,如果它是,就是和随着相量摩长的增大而减小的,它就是逆变,如果随着相量的摩长增大而增大的,它就是斜变,就是这样的一个定义方式,然后我们将X和这个基底的点击。

这个东西我们就记作XI,XI就等于X和EI的点击,当然这可能和大家熟悉的结论不一样,因为熟悉的结论我们还要在这里再除掉一个东西,因为我们还要保证这个EI是归一的,我才能这么去写。

但现在我们就不考虑这个事情了,我们的基底无所谓归一不归一的概念,我们的基底就是基底,就是我有若干个基底,然后这些基底是不是摩长为一,我现在已经不关心这件事了,所以在一般的情况下。

如果你的这些基底它的摩长不为一的话,它不是单位的话,那么显然你的XI是不可能,就是XI的斜变分量是不可能等于它的XI的逆变分量,然后这个时候我们可以定义一组新的基底。

然后注意我们现在这个基底的下标都变成了上标,然后这个新基底和原基底之间的关系满足,斜变的EI乘上点乘逆变的E界得到的是ΔI界,ΔI界是克罗内克符号,只有当I等于一的时候它是1,当I不等于一的时候它是0。

这个时候我们刚刚的位移就可以用逆变基底来展开了,逆变基底展开就会写成这个X1的斜变分量乘上它的逆变基底,斜变分量乘上逆变基底,跟刚刚正好是对称的,然后如果我们启用爱因斯坦球和符号的话。

它是说我们可以将刚刚的这个向量写成XI和乘EI的形式,然后它其实就是当我们看到这两个指标是相同的,我们就暗含了,暗含了,暗含了一个σ,就相当于说,这个式子是这个式子的一个减计。

然后逆变与斜变分量之间它是什么样的关系呢,首先,斜变分量等于向量本身与它的斜变基底的点乘,逆变分量等于向量本身与它的逆变基底的点乘,然后所以如果我们将这个,这里好像多写了一些东西,这个I应该是多余的。

如果我将X写成,对对对,它不是多余,就是左边的第一个式子,我将这里的X用X借E借给代替,我们就会得到这样一个形式,然后这样一个形式我们再将X借,因为它是一个标量,我们把X借提出来。

然后右边剩下了一个EI点乘E借,所以我们就会发现,XI它的斜变分量等于它的逆变分量乘上了一个标量,然后当然这里漏了这里有个σ,然后这个标量是,它的斜变基底EI和斜变基底E借的点乘。

我们将这个点乘出来的结果记作GI借,那么最后因为GI借的有两个参量,每个参量的取值都是123,所以我们得到了一个度规张量,这个度规张量的GI借就是EI和E借点乘的结果,然后通过度规张量。

我们能够把XI和X借给关系到一起来,然后我们已知斜变和逆变的概念,都是由于基底的选取而产生,所以标量因为它是零阶张量,它就没有分量的概念,所以就无所没有什么斜变标量,逆变标量之分,因为标量它没有分量。

没有分量就没有斜变逆变,然后始量呢,始量它是一阶张量,所以什么是一阶张量,就是它是斜变或者逆变基底的线性组合,我们刚刚已经给出了两种不同的线性组合方式,所以它只有一个指标来决定它是斜变还是逆变。

所以我们有时候也会说,这是逆变始量还是斜变始量,但这么说是不准确的,其实它的分量是斜变的还是逆变,始量就是始量,但是始量因为它只有一个指标,所以这个一个指标本身是有斜变性或者逆变性,那么张量呢。

就是我们一般所称的张量都是说二阶张量,二阶张量是有两个指标,比如说我们刚刚给出的克罗内克福号,delta ij,它就是一个二阶张量,你可以看到它有一阶逆变,一阶斜变,因为它有一个这个。

有一个这个指标是写在下标上,有一个指标是写在上标上,所以我们称它为一阶混合张量,然后如果是二0张量呢,它其实就是二阶逆变的,一阶斜变,如果是一这个零二张量呢,它其实就是零阶逆变的,二阶斜变。

规律是什么样的,比如说二零张量,tμν和tαβ,它之间的关系是,偏xμ/偏xα,然后是偏xν/偏xβ,这样得到的就是二零张量的变化规律,然后一一张量的变化规律呢,是跟刚刚不一样的地方在于μ是一样的。

μ仍然是就是拿左边的这个xμ,右边的是xαα,这个它们两个求偏倒,但是在ν和β的关系上不一样,这个时候是xη的β分量和xν的分量求偏倒,它们俩是颠倒一个个,它们的变化规律就有区别,然后具体来说。

这个病就是张量的不同的记号有什么关系呢,就是我们知道我不管是用这个,就是用逆变还是斜变,我分量来表示的质量都本质上是一个质量,那我们不管用二零张量还是一一张量来表示的张量,它其实本质上也都是那一个张量。

只不过,这一个张量呢,我们在不同的基底选取下有着不同的理解方式,比如说回顾一下,我们在线性代数里面矩阵是如何用来表达线性变化,其实矩阵表达线性变化有两种方式,第一种是我们认为基底是不变的。

当矩阵作用到这个基底所对应的某一个固定基底的某一个坐标所对应的向量上,矩阵更改了这些坐标,所以此时的矩阵元构成的就是一个二零阶张量,还有一种,那个矩阵表示线性变化的理解方式是我们假设坐标是不变的。

但是矩阵碰到坐标会改变这个基底,某一个矩阵会把某一个基底给改变,这个时候我们的矩阵元构成的就是零二阶张量,然后不管你是用哪一种,这个二零阶也好零二阶也好,你都可以表示所有的线性变化。

它只是一种我们理解变线性变化的方式不一样,这是我们来看并使的概念,并使就是两相当的张量级,只不过在物理上呢,就是一开始大家没有线性代数的认识,我们用一种比较直观的方式去解释。

比如说X它是就I和J都是基底,X是AI+BJ,Y是CI+DJ,那么XY就是作为一个并使,它就是ACII+ADIJ+BCJI+BDJJ,这就是一个并使,然后并使和点击之间是有结合率的。

XY作为一个并使去点成Z,等于X乘上Y先点成Z,然后X点上YZ的并使,它等于X先点成Y然后再乘Z,这可以用张量级的矩阵形式来证明,因为我们刚刚看到的这个所谓的X和Y的并使,它其实就是这个XY转制。

如果我们写成分量的形式呢,就等于说我们刚刚用这个并使得到的张量,它的TIJ作为一个20J的张量,是等于XI乘上YJ,那么并使这个东西它并不是一个非常,就是量定义的这样一个概念。

就是它和最根本的张量分析之间有一定的差别,就是从张量分析的角度上来说,我们可以定义张量的并成,这样的并成是说MNJ的张量与PQJ的张量并成,我们会得到一个MN+P N+QJ的张量。

然后这个并成方式其实是很简单的,比如说X是一个10J的张量,它是等于XIEI,然后Y是一个10J的张量,它是等于YJEJ,然后我们将它并成就会得到TIJ,TIJ我们是直接把XI和YJ给写到一起来。

也就是XI EI YJ EJ,我直接把他们两个给写到一起来,写到一起来之后,我们把里面的所有这个分量给提出来,写成XI YJ,然后把所有的基底给写到后面去,就得到了XI YJ EI EJ。

这就是这个张量的形式,注意这个基底的顺序是不能交换的,我在做并成的时候只能把,它的分量提出来写到一边,把它的这个基底提出来写到另一边,但是这个过程当中是不能交换任意两个。

这个分量或者任意两个基底的顺序的,这个叫并成,并成完以后我们可以定义张量的缩并,缩并就是刚刚如果我们定义了,有这样一个张量,它有三个分量分别是XI三个维度,一个分别是XI YJ和ZK。

然后它有三个基底分别是EI EJ和EK,我们也就说它原来是XI EI YJ EJ ZK EK,这三个张量给并成到一起的,这时候我想缩并这个斜变的基底EJ和,逆变的基底EK,我们就将EJ和EK的。

给改写成ΔJK,然后别的都不变,然后注意到ΔJK乘以ZK之后会得到ZJ,所以最后我们就得到了一个始量,这个始量的每一个分量的值等于XI YJ ZJ,也就是它其实是XI SIGMA YJ ZJ。

然后缩并一般是在一对斜变和,逆变的基石之间展开的,然后是我们可以利用克罗内克符号,使张量的结数降低E,也就是逆变降低E 斜变降低E,缩并后的张量与被缩并的基石是独立的,也就是说我不论I和J所对应的基石。

EI和EJ如何选取,现在就再也不会影响缩并后的张量,这个形式上是长什么样,因为我在这个张量的形式里面,已经不包括被缩并的基底了,比如说在三维空间当中,AIJ乘上EI再乘上EJ,它的缩并结果就是零阶张量。

A1+AR2+A33,这就是一个与基底选取无关的量,它其实是G,就是某一个张量某一个二阶的张量长这样,然后如果我将它的两个基底都给缩并了,这样我们就会得到它的G,那么我们知道一个张量的一个矩阵的G。

它是和基底的选取无关的,什么叫基底的选取,也就是不随相似变换而改变,这就连起来了,就是说我们缩并的东西,就是不再影响它求解值的,然后这时候我们再来看到底什么叫点击。

这样的点击就等于先将它们两个连力做连程,然后再缩并的结果,那么对于高阶张量来说,它的点击形式就有可能有很多种,因为你缩并是在任意两对基底之间展开的,你并不知道是哪两对基底,如果我们选择了这两对基底。

分别是T的最后一个基底和S的第一个基底的话,我们就可以把这个点号写在它们两个中间,写成T点成S,然后如果这两个张量呢,我希望它这个缩并的时候同时缩并两对,那我们这两对怎么去选,它就是有学问的。

比如说如果我缩并T和S的倒数第一个基底,再去缩并T和S的倒数第二个基底,就是说Ti界EiE界这是第一个张量,然后Sk也要EkE也要这是第二个张量,如果我们以并联的形式去做双点击的话。

它相当于我将Ei和Ek缩并,E界和E也要缩并,第一个得到ΔiK第二个得到ΔjL,然后如果是并联式的话,相当于我先将这个E界和Ek缩并,再把Ei和E也要缩并,它是这样联系,这个是Ei和Ek。

这是E界和Ek,给出我们给一些实例,比如说刚刚我们给的,下面这个是并联式,我的问题,这里应该是,不是上面是并联式下面是串联式,串联式的这两个点不应该写在中间,而应该写在这里,它应该写成这样,T两点S。

它应该长这样,之后会把刻件修改一下,然后我们来看一下,如何用上面的结论去证明,我们说的相量的,就是相量的并成的成法的结合率,那么X和Y的并成就相当于,XiY界然后EiE界是它的两个基地,按顺序写下来。

然后点成ZkEk,这是第二个相量,我们是先把这些每一个分量写下来,再把它们的基地给按顺序写下来,然后我们注意点成,这个点成是写在这的,它相当于要把这个东西和这个消掉,然后我们把这个和这个消掉就得到Ei。

然后dkJk,然后Zk和dkJk会消掉,把K换成J,得到XiYJZJ再乘以Ei,然后最终我们再把这个式子给整理一下,它就等于X乘上Y先点成Z的结果,然后类似的我们还可以去证明。

U点成U的gradient,等于U先乘上gradient再去,作用到U上的结果,然后具体的证明过程,我就不在这里赘述了,然后这个结论是很重要的,它是说在流体模拟当中,它给出的是纳维斯托克斯方程。

左势的一项很重要的概念,当这里的U起作速度的时候,上势就是随体导数,随体导数是说,在一个速度场当中,我放一个值,放一个东西在这,然后过一段时间,它飘到另一个地方,这是一个速度场,然后速度场当中。

它会满足这样的形式,因为我这个东西,它不仅自己在变,它还在沿着速度场在动,所以我们得多加一项,沿着速度场在动,一般情况下,为了我们省字数,我们还会把偏比偏XJ,剪辑为这个partial J。

然后偏UK比偏XJ,我们又可以把它剪辑为,这个UK,然后逗号一个J,这个逗号表示求导,大家看到,有一些这样记号的时候,逗号是区分分量,和它求导的分量之间的,这样的一个关系,所用的符号。

然后我们可以用张量,去表示XJ,这里要引入这个,列为奇维塔符号,它意思是说,它是一个三阶的张量,它只有在这个三阶的张量,取成IJKJKI和KIJ的时候,是等于1,然后KJIIKJJIK的时候。

是等于负义,下标有重复的时候,都是为0,而这个,这其实就是行列式,它其实就是行列式,它其实就是可以用来定义行列式,然后一般意义下,这个列为奇维塔符号,和我们刚刚说的,克罗内克符号之间,是有一定关系的。

如果这个IJK写在下标上,乘上IMN写在上标上,它会得到DATAJM,DATAKN减去DATAJN DATAKM,然后类似的我们还会有,这个EPSILONJMN EPSILONIMN。

它的缩并完之后的结果是,2DATAJI,然后EPSILONIJK和EPSILONIJK,它的缩并完结果是6,然后前面两个结论就比较难说明,我们可以看一下最后这个,最后这个是很显然的,因为当你IJK分别。

从1去到3的时候,只有这几种情况,它是这6种情况,它是非0的,所以这6种情况相加就是6,因为1乘1加上-1乘-1,再加1乘1加-1乘-1,加1乘1加-1乘-1,都要等于6,然后剩下都是0。

所以用张亮表示插机,就是我们先将这个项量写出来,再把另一个项量写出来,然后求它们两个之间的插机,它就等于XIYJ,把它的分量写出来,然后后面我们去做一次,这个插机的结果就是,我把这个列为7维塔符号。

写在这里,IJK,然后作用,然后只剩一个这个基底,就是EK,在单位的正交基底下,我们就可以忽略这个斜边和逆边,写成一个更直观的形式,就是XIYJ,然后EK,就是X插程Y的K分量,等于XIYJ。

乘以一个EK,我们可以利用这个张亮的,这个相量形式表达的列为7维塔符号的插程,来证明一些和插程相关的恒等式,比如说X插程Y,它的摩长的平方等于X的平方,Y的平方,减去X和Y的内积的平方。

比如说这样一个结论,而这结论的证明就参见底下的一个过程,大家可以课后的时候对照科研看一下,然后它其实就是完全利用了,我们上面给出的这些恒等式的结果,最后就是我们要说明一下,张亮的本质是什么。

张亮的本质其实就是,我们可以通过这个所谓队友线性空间的概念,去理解张亮的本质,但是就出于课程的这个内容的考虑,我们就不在这里说了,我个人在这里想通过张亮,跟大家讲一点是说,首先第一个,张亮是比,矩阵。

跟本质的一种表,当我们在说,矩阵的时候,我们往往是把基底给忽略了的,我不知道基底是什么,但是我们在说张亮的时候,我们必须时刻记得,我们所对应的某一个斜变或者逆变的分量,或者是既有斜变又有逆变的分量。

它是在怎样的基底的定义下,才存在这个分量,所以张亮是比矩阵更加本质的表达,它会强迫我们一直记得,有一个基底这样的概念,然后第二,张亮可以用来,简便计算,假如说你不太理解什么叫逆变,什么叫斜变。

那么至少可以用,我们就忘记那些事情,我们直接说向量x等于xi,Ei,然后向量y,等于yj,Ej,然后我们在计算x点成y的时候,它相当于写成xiEi,yjEj,点成,这时候我们考虑到。

如果i和j是单位正交基底,那么Ei点成Ej就是Δij,最终我们就得到了xiyi,这是不是正是我们在,欧几里德空间当中所熟悉的,求内积的方式,在欧几里德空间当中,我们求内积大家最熟悉的。

就是将对应的分量相乘,然后用账号的形式来,验算的话,它会强迫你记得,这里有一个基底的概念,为什么它等于,对应的分量相乘,是因为这些基底相乘,等于Δij,如果这个结论不满足,它就不一定等于,等于这个概念。

比如说如果Ei乘Ej,不是一个Δij,而是某一个矩阵Gij的话,我们的内积就必须,写成这样的形式,所以通过这个例子,我们就可以看到,一 蟑螂式比矩阵,更加本质的表达,其二 蟑螂式可以用来,简便计算。

它可以帮助我们去证明,一些东西,比如说去证明,当Gij等于Δij的时候,x。y就是xi,或者是左边我们看到的,这些向量的差成的恒等式,如果我们再引入,列为奇畏塔符号以后,我们会发现一些,就是看起来。

如果你,就是纯粹观察,你很难,由于注意力涣散,而没有办法注意到的事情,都可以用蟑螂分量的形式,把它证明出来,所以这是第二个结论,蟑螂可以用来简单计算,第三个,我讲蟑螂的理由是,当大家看到在图形学中。

大量出现的蟑螂的时候,比如说,这个杜规蟑螂,也就是刚刚我们说的,Gij,比如说我们说的,柯西印尼蟑螂,σ,它们其实,并没有什么特殊的东西,我们一般在图形学里面,所谓的张量都是二阶,都默认是二阶。

然后而二阶的张量,它和矩阵表达,对应的是同样的物理背景,它们都是一个线性,对一个线性变换,或者是一个,这个线性空间上的,线性映射的这种,表达而已,所以你从某种意义上说,它就是一回事,无论是。

你称它为杜规蟑螂也好,还是你把这个Gij,给写干脆写成G11 G12,这样写成一个矩阵也好,它都是对同样的一件事情的表达,当你觉得,你在图形学看论文,你看到一些论文上写着,某某张量。

你觉得你理解不了的时候,你就尝试把它作为,一个二阶矩阵去理解,也不一定是二阶矩阵,你就一般强项密道是三阶矩阵,我们说的是,就是把它看成一个矩阵去理解,一个和所考虑问题相关的,这样一个二乘二。

或者三乘三的矩阵去理解,然后,但是当这个论文的作者,在使用张量这个词的时候,他想说的是,这里面的每一个数,G11 G12,它的存在都依赖于基底的定义,只有在特定的基底下,它才长这样,就是作为初学的话。

大家可以记得这件事情,我觉得就很不错了,就是张量可以用来简便计算,我们可以把任何一个,矩量写成,它的分量和它的基底相乘的,并求和的形式,然后,我们在运算的时候,把它们用爱因斯坦求和符号。

给省略掉sigma,然后我们看到同样的下标,就把它们乘在一起,然后求sigma,利用这个结论,可以证明许多恒等式,然后这些恒等式,都是在大家,看文章或者是,做研究的过程当中会用到,所以我们作为练习的话。

我们作业题里面会有一个张量,用来做简便计算的,这样的一个作业题,大家可以试着去做一下,好,最后呢,以上就是我们关于,线性代数的这个课程的内容,我们是总共是讲了三个小时,然后,推荐的教科书呢,不好意思。

推荐教科书呢,第一本是这个,这一本书,它是以非常的,就是直观的数学图像,去讲述的线性代数,在网上都可以查到,然后第二个呢,是你们今天讲的矩阵求导里面,我所说的,大家可以作为工具书去查的。

它里面给了各种各样,不同形式,什么ax b,然后偏这个就是类似于,长这样,就各种各样,它各种各样的变形,求导求出来的结果是什么,它一个,一本小册子的形式,全部都告诉你,然后你也不,你如果不喜欢。

不喜欢自己去推,为什么的话,你可以直接抄这本书,它上面是什么样的,你就认为是什么样的,就可以了,然后,另外的三本书呢,是供大家理解,我们今天所讲的,这些拓展用的,一个是矩阵分析运用,然后是张杨分析。

还有这本物理几何学导论,它要发比样的,我们这三小时所说的内容,然后它也包括了,我们这门课程后续的一些,讲述的东西,然后如果学有一日的同学,我觉得这些都是非常好的,这个教科书,然后网站第一个。

3blue1brown,上上节可以给大家推荐过,它是讲这个线性态数的,呃,线性态数,以一种动画的形式,跟大家说线性态数的,呃,这个直观理解是什么样的,然后第二个,Matrix Calculus。

它给出了一个我们今天,就是大家看到那些非常头大的,矩阵求导的一个在线的计算,计算工具,就是如果这个是工具书,这个这个相当于搜索,搜索引擎,好那就当需要需要用到,矩阵求导的时候可以用这。

要么用要么去查这本书,要么你就输到这个上面来,最后说一下我们这个第一节课,线性态数课的作业题,然后作业总共是七道,在图形起源当中有所应用的,线性态数的证明或者计算,然后要求大家是用。

Latex或者Word等工具,以规范的公式排版书写,就是我觉得这个对于做这个,进行一些计算机科学的,这个研究的同学来说是必不可少,所以希望大家用规范的公式排版书写,然后字号字体等格式就是不限。

然后最后我们,就是让大家注册上那个,就是课后有同学问,所以我们发在提前发在群里,就是注册在线课程系统的网址,是在这里,然后大家注册完以后会,我们今晚会把这个提交地址,给创建脑作业中去。

然后大家以规范的公式排版书写,之后导出为PDF文档,然后上传到这个系统上,我们就能看到,然后每次作业的满分是100分,然后达到60分就视为本次作业通过,然后全部课程作业。

因为我们也不一定每次课程都有作业,全部课程作业当中通过80%的呢,就可以获得这个结业认证,到时候可能是以推送的形式,以邮件的形式,然后给大家就是相当于一个证明,然后其中的优秀者或许会有奖励。

然后这个我们也跟这个Games官方,去了解一下,就是奖励大概会什么样的形式,然后每次作业是给五周的时间,今天的作业就布置的时限,就是3月12日的零点,一直到4月16日的零点,这段时间大家都可以提交。

以上是关于这节课的内容以及作业,大家有什么问题吗,会有答案会有答案,批改结果的话,可能这个我们到时候不一定有,就不一定,下节课讲什么,下节课讲计算机,这是一个比较轻松愉快的话题。

就是比较计算机的一个话题,对下节课没有这么多同事,你希望看具体公式应用场景,他也没有了,下节课没有这么多同事,下节课我们就是回到一个比较,计算机的角度,因为现行代数这块,他确实因为他是所有的东西的基础。

我也很希望说我们能够给他加一些,具体的用力,我也试着往科建里面去,加了很多,他大概用在什么地方的讲解,但确实有一些隔靴搔痒,因为现行代数,实在是如果你不从很理论的角度去讲的话,你就很多东西都讲不清楚。

所以我只能第一节课,把他作为工具书去用,有哪一些知识点,然后我尽量把用到的所有的公式,我们做作业用到的所有公式,全部都放在PPT上,PPT公布之后,大家可以照着PPT再去演算一遍。

因为让大家在几个小时之内,把这些东西全部都学会,我觉得确实比较困难,当然也有个人讲述水平的局限,是CAGD还是另外那个计算集合,就是你不管是哪个计算集合,它对应的东西其实是差不多的,我们想说计算集合。

我觉得应该是你所说的另外那个计算集合,我们要讨论的是点线面的表达,然后他们的位置关系,他们的焦点,大概是这个方面,然后矩阵导数那一块,确实这个地方比较的绕,我们可以回去看一下,就类似于讲招要那个地方。

我也以几个我觉得比较重要的点,第一个点是,我们的点击量,我们可以看到,我们的点击量,我们可以看到,我们的点击量,我们可以看到,我们的点击量,我们可以看到,我们的点击量,我们可以看到。

第一个点是实质函数的偏导数,它的形式是由自变量来决定,比如说偏F比偏X,这的X可能是向量,可能是矩阵,如果F是个标量,我偏出来的东西,如果X是向量,我偏出来的就是向量,如果X是矩阵,我偏出来的就是矩阵。

然后它的每一个元素都等于,标量对于它的每一个分量的偏导,然后以它本身的形式给写出来,然后第二个是,这个函数的微分,它的形式是由音变量来决定,就是DF和F是一样的,如果F是标量,那么DF就是标量。

如果F是矩阵,DF就是矩阵,而且它长的形状是完全相同,第三个就是这个式子,如果我们能将,如果我们得到了某个式子是长这样的,DF F是个标量函数,它等于trace,这里是某个矩阵,然后乘上这个标量函数的。

标量矩阵函数的,这个字变量的微分,形成了这样一个东西的话,那么这个A就等于偏FXB偏X,这是一个帮助大家去快速的算出偏导数的方法,就是如果我们能通过某种蹊跷的方式,整理出上面这个式子。

那么我们这里的A就自动等于这个,然后这个结论呢,就是这些矩阵求导的这些结论呢,我们如果大家想要去用的话,就刚刚我们说的可以去查工具书,或者是去搜索引擎,如果你不太会不太愿意自己去算。

这个就是关于矩阵求导的部分,我想和大家去说的这样的东西,我个人是觉得这些东西,因为我们这是第一节课,第一节课我还是希望把整个我们所用到的最基础的数学工具给大家说一下,然后从第二节课开始。

我们就不会以这样的形式,就是一个知识点一个知识点,跟大家去讲这种怎么计算,这种他们要满足什么运算率,这种这样去讲,从第二节课开始,我们所涉及到的数学内容,基本上就是紧密结合在为图形学服务的目的了。

然后但是为了这个课程的完备性,所以我们必须要有这么一节,然后我尽量把所有的知识都写在了PPT上,然后当之后大家在看后面的内容,然后所遇到某个概念不太清楚,某个东西不太了解的时候。

可以大家去翻第一节课PPT,然后如果能达到这个目的的话,然后第一节课的意义就完成,好吧,行。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后大家如果没有其他的问题的话,我们就下课,然后下节课我们就开始正式讲一些和图形学关系比较密切的数学问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一些数学的专题了。

GAMES001-图形学中的数学 - P3:计算几何 - GAMES-Webinar - BV1MF4m1V7e3

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

同学们好,今天是3月18号,然后我们今天来进入一个比较轻松愉快的话题,计算几何,然后今天的内容应该不会再像前两节课那样,需要额将近两个小时的时间了,现在应该可以就是啊准时下课啊,我希望如此啊。

然后我们先进入这个第一环节,第一个部分呃,首先我们来看就是我们说计算几何,那么什么是计算几何呢,呃有过信息学竞赛经验,或者是大学生程序设计竞赛经验的同学,应该对计算机和都不是很陌生。

然后所谓图形学当中的计算几何呢,它其实就是这个这个OI中的计算机,和它之间有一定的关系,呃,有有一定的区别,但是区别并不是很大,呃我觉得图形学计算几何,最主要是它在三维的问题上,会比OI有更多的要求。

但是呃我们所说的二维计算几何,仍然是这个三维计算几何的基础,所以呃今天的课程,我会就这个oi中的计算几何,和图形学当中的计算几何,然后去解决一些就是我们图形学所关心的问题。

诸如OI中的有一些比较偏门的算法,我们不会去讲,然后我们也会扩充一些有关三维的知识,然后我们的核心可能要放在,如何把二二维的计算机和拓展到三维,这个问题上,然后我们首先来看呃,其实计算几何这个东西。

它从本质上说它不是数学,虽然我们除了它的图形学中的数学,但它它就是一门计算机科学下的一个研究分支,或者说更进一步的说,他甚至就是图形学的一个研究分支,计算几何,但是它所用到的东西却是直接接触到数学的。

然后我们可以看到今天的我们从头到尾讲解,不会出现代码,我们只会去讲这个算法,然后以及一些最基础的解析几何的知识,所以呃从这个角度上来看,它又是竖写的呃,计算几何的历史呢,其实到现在也并不是特别的久。

大概也就50多年的时间,然后他关心的是那些解决几何问题的算法,然后包括这些三角剖分啊,图包啊,扫描线啊这些东西,他们都是计算几何,然后呃相比于别的算法,它的特点主要在于它需要处理实数,而不是整数。

并且呢他需要关心向量,当然这个向量和我们线性代数基础里面所讲的,那种高维向量不同,它主要指的是低维的向量,并且啊就是他主要关心的是这种低位向量,不是标量,为什么需要计算几何这一门这个研究分支呢。

主要是我们希望在计算机中,降低解决几何问题的复杂度和数值误差,然后我们今天呢主要关心的是第一部分,也就是如何降低在计算机中,解决几何问题的复杂度,关于数值误差的部分呢,哦应该会有别的更专业的课程去讲解。

而且他也超过了我们这个图形学中的数学,这个范畴好,那么下面就进入这个计算几何的世界啊,计算几何,最上来我们需要给出的是有关点线面,这些最基本的几何体的表示呃,为了定义这些几何体呢,我们首先要确定坐标系。

然后坐标系其实是由这个原点和坐标轴,所构成的,原点的选取,当然理论上说是任意的,那么所以呃最关心的点,它就在于如何去选取坐标轴呃,按照我们在线性代数基础的课,里面所讲解的内容。

我们希望这个选取的坐标轴它尽量是,这个单位正交的对吧,因为单位正交的它的内积就会非常的好算,所以我们希望这个东西它是单位正交的,那我们把单位正交基底的这样坐标轴,叫做笛卡尔坐标,然后笛卡尔坐标的三维。

在三维的笛卡尔坐标就是XYZ这三个轴,然后在XYZ这三个轴当中,一般情况下我们会以RGB,你看它正好是和RGB3种颜色对应的,就是当大家看到一个图形学应用当中,没有给你标谁是X谁是Y谁是Z。

但是给你画了红线绿线蓝线的话,那么它就是确定了他的这个软件的XYZ,是怎样排布的,然后这里我我就以列举的形式,给出了一些常用的图形学软件的事例,呃首先呢就是就是呃,这个以Y轴为竖直方向。

然后以右手系的这样的这个软件呢,主要是由胡迪尼和玛雅,然后我们可以看到它的形式大概就是啊,这个Y轴是竖直方向,然后右手系就是X的正方向指向屏幕的右侧,然后Y的正方向指向屏幕的上方。

而Z的正方向垂直于屏幕朝外,然后Y轴为竖直方向,还有左手系,左手系的也有很多的代表是unity three d,它是它和上面的这种唯一的区别,在于Z轴的正方向是垂直于屏幕朝内的。

就是用我们高中物理熟悉的这个符号的话,它们Z轴方向分别是这样,然后呃这两种,我觉得对大家来说都算是比较直观的对吧,然后还有不太直观的就是取Z轴为竖直方向,然后呃取右也取右手系的这样的一种坐标价。

选取它以blender为主,然后这种是Z的正方向指向屏幕的上方,Y的正方向垂直于屏幕朝内,与上面那种相反的呢是Z轴为竖直方向,左手系的,而这种是以unreal为主要势力的这种软件。

然后我们可以看到这以上的四种坐标系,可以说都有自己很具有代表性的这个图形应用,比如说胡迪尼啊,这个unity啊,Blender unreal,他们竟然都是不一样的,所以大家在使用这些图形写软件的时候。

一定要先搞清楚他们的坐标轴,到底是按照什么方向去选取,然后在更底层的API里面,open gl和DVD,一般情况下我默认open gl是右手系,DCD是左手系,但是这其实并不是说。

他的这个API内部规定了这些东西,而是呃它有一些他们自己的官方实现的库,是做了如上如上的假设,所以我们一般认为open gl是右手,PRDCD是左手系,然后至于到底什么叫右手系,什么叫左手系,呃。

我这里应该有一幅图,可能是这个这个网站有没有同步,我看看能不能关掉PPT同步一下好了,现在大家应该能看到这个右上角的图了啊,就是所谓的左手系,就是呃其实有两种,这个用左手和右手去辨别坐标系朝向的。

取向的方法,第一种是呃就就是我在这个PPT上放出来的,如果我们把这个这个左手握拳,然后呃让这个除了拇指以外的四指,从X方向往Y方向转,那么此时拇指的朝向就是Z轴方向,然后相应的如如果右手握拳。

右手的四指从X往Y方向转,那么拇指指向的方向是Z轴方向,然后这就是左手系和右手系的确定方式,然后个人感觉这种确定方法是比较简单的,然后除此以外还有用三个手指的那个做法,但我觉得那个就是就是。

至少我个人握起来不是非常舒服,所以我比较推荐的是这样确定坐标系的方法,我们来进入下一个,然后确定坐标系之后,我们就可以定义点了,然后点呢其实一般情况下,我们可以把它等同于使用。

因为它可以看成是从原点到这个点的位置,但是呢我在一些这个图形学所使用的API里面,或者一些第三方库里面,他们往往会把点和矢量的概念进行区分,然后他可能会定义两两种不同的数据结构,一种叫point。

一种叫vector,然后此时呢他们的point相减会得到vector,point相加是未定义的,而point正加减一个vector,得到一个point,vector加减一个point也是未定义的。

他们可能会这样去做一些规定,然后这个需要大家在使用这些库的时候,要提前看一下它是否采用了这样的方法,然后定一个点我们就可以定义线,无论是在二维还是三维,我们都可以把直线或者射线定义为,从一个点出发。

沿着某个方向向量,并且有一个参数T如此的参数方程来规定啊,对于直线和射线,唯一的区别就在于,直线的T取值范围是负无穷到正无穷,而射线的T取值范围是零到正无穷,然后呃很对于直线来说。

这个P点可以是它上面的任何一个点,而射线呢它必须是这个射线发射的端点,线段呢就是有两个端点的所谓直线,然后我们的定义方法也是类似的,我们可以用参数方程来定义,如果现在有两个单点,一个叫P1。

一个P2的话,我们很容易把它的参数方程定义成P1,加上T倍的P2减P,然后我们合并一下同类项,就得到了是这个一减T倍的P1,加上T倍的P2,然后P1P2分别是现在的两个端点,就是现在的表示。

这些对二维和三维都是成立的,然后面面是一个三维的量,就是它不存在二维的编码,然后无穷大的平面,我们可以用这个影视方程来,这是个隐式方程,我们可以看到这里并没有参数,无穷大的平面可以用平面上任意一点P。

然后前面有个点X是外面的,就是某一个点,也就是说某一个点,如果它和平面上的某一个点P相减得到的差,在点乘平面的法向量是零,那么我们就这个点就一定是在平面上,然后这一点也很容易证明。

因为平面的法向量会垂直于平面内的,所有的线向量,然后如此呢,我们又可以定义半平面,所谓半平面,它其实不是平面,而是一半的空间,此时我们说X减P点乘normal是小于等于零的。

那其实指的是这一个平面以下的所有的空间,这个时候法向量的正负就有意义了,因为如果我们把这个法向量取负号的话,它其实指代的就是原来的上半部分空间,然后类似的既然直线可以给它限缩到线段上。

那么平面也可以给它限缩到三角三角面片内,如右图所示,我们的这个三角面有P一P二P33个顶点,然后我们类似的可以把它写成参数方程的形式,一加上UV的P2减P加上V倍的P3减P,然后合并同类项。

得到一减U减VP加UP2加VP3,然后此时这个方程就是这个三角面的参数方程,然后我们看到这个方程它不是特别的对称,就是这个形式看起来并不是特别的好看,然后或者其实我们也并不是特别明白。

为什么我们一定得这么取,只能这么取呃,其实上面这个过程可以把它看成是以下的这个,这几条操作的合并,因为我们是想将X限制在P1P2,P3这三个顶点决定三角形之内,所以我们相当于说是。

我们要先要在P1和P2之间找一个点,我们在P1和P2之间找一个点,然后这个点它显然满足线段的参数方程,它等于一减T1撇位的P1,加上T撇位的P2,然后我们再在这个点叫X1撇。

我们再在X1撇和P3之间找一个点,这个点就是X,然后X满足的也是X撇和P3的这个线段,的参数方程,所以它等于一减T乘一减T1撇的倍数,P加上一减T乘T1撇的倍率,P2加TP3。

如果我们令U等于一减T乘一减T1撇的话,V等于T1撇,减TT1撇的话,然后我们最终就会得到X等于UP1加VP,二加WP3,然后我们很容易验证,上面的U加V加W是等于一的,也就是说通过这样的方式。

我们可以构造出一个在这个P1P2,P3这个三角形内的一个点,并且此时使得它的每一个这个顶点的权重,相加的和等于一,当然由于我们上面以上这个过程,我们用的都是一减T1撇和T1撇。

所以UVW也必然都是在零和一之间的量,它不可能是小于零或者大于,然后定义了点线面之后,我们还要看点线面之间的关系呃,首先我们看这个点与直线的距离,就是在本次课件中,如果我在标题上没有标明。

这个是2D或者3D的话,那么它基本上是意味着,他对于2D或者3D都是通用的,就是我们为什么要如此的去定义直线,如此的去定义这个平面,如此去定义点呢,就就在于我们用这个方法去计算距离的公式。

对于维度是无关的,不管你在这个二维还是三维下,都可以用同样的方法去计算,首先我们来看点与直线的距离,给定一点P,给定一个直线的参数方程X等于O加TD,那么这个点与这个直线的距离,可以用P减O叉乘D。

然后再比上D的这个模,来确定这个事情是为什么呢,我们可以看右边这幅图,P减O就是这个虚线,P减O就是P在这里,O在这里P减O是这个虚线P减O叉乘D,我们得到的是什么呢,其实是P减O叉乘D。

我们把得到的其实是这个三角形的面积乘二,对吧,我们德尔其实是这个三角形的面积乘二,然后这个三角形的面积长二,如果我们再除以D的模长,我们得到的就是这个三角形沿D这条边的高,那其实这个边的高根据定义。

它就是PP点到这条直线的距离,然后类似的,既然我们已经知道距离可以这么算了,我们也可以算他在直线上的投影,在直线上投影的方式呢是呃要怎么去做呢,我们其实就相当于说我们要找一个点,在直线上找一个点。

然后他和P点之间的差,向量和D这个向量正好是垂直的,也就是说我们要满足这个条件,然后把这个条件给展开,就得到了一个关于T的一次方程,然后我们再整理一下,就直接得到这个式子,也就是说。

然后就我们再把T带回到直线的方程里面,就可以得到这个切啊,直线外一点在直线上投影的位置,坐标的计算方程,那么如何去计算点与射线的距离呢,其实和之前是一样的对吧,其实我们需要先确定这个T是什么。

然后如果T大于等于零,它就是到直线的距离,如果是T小于零,说明我说明它比如说这个射线的端点在这里,而我们取到的这个最小值点在这里,那么它的最近距离,就是直接取它和射线的端点的距离对。

这就是点与线的距离的计算方式,然后接下来我们来看线与线的位置关系,呃这个位置关系主要是在2D当中去确定的,呃,我们首先来看共端点的射线和,或者说是线段的绕叙,我们假设射线一二的端点都为O。

然后它们的方向向量分别为第一和第二,然后或者是我们可以设现代一的端点是op1,现在二的端点是op2,不管这两种方向,两种定义都会得到右边这幅图这样的结果,然后我们可以直接拿第一去差乘第二。

注意这里的叉叉乘是限缩在二维翼下的尾,插成,它等于X1Y2减X2Y1,得到的是一个实数啊,这个大家应该上节课都都讲过了,所以啊我放在这里再提示一下,然后我们用这个叉乘得到的结果是一个实数,如果它大于零。

这就说明这个射线二在射线一的左边,所谓左是说逆时针的转角是小于180度的,如果是小于零的,他意思是说射线二在射线一的右边,然后这个U的意思是指,顺时针能转角小于180度,如果是等于零的话。

它说说明射线二与射线一重合或者是反方向,那么如何判定是重合还是反方向呢,我们这时候就需要通过点乘来进一步判断,因为在点乘的情况下,如果是重合得到的点乘值是大于零,而我是反方向得到的点乘值是小于零。

我们再来看直线与直线的交点,在二维当中,我们有两条直线,它们的参数方程分别是X1等于O1加TED,X2等于O2加T2D2,然后他们两个的交点所满足的公式是这样的,就是我们可以任取其中一个。

直线上的这个参数方程,比如说呃在直线二上,我们去找一点,它满足O2加T2,第二它在这个这个位置上,然后我们想说它也落在直线一上,它其实就是说它和直线一的端点之间的差,向量和第一是平行的。

所以我们就列出了这个式子O2加T2D2,比如说我们得到这个点,然后它会得到这个点,这个点和O1相减,我们又得到一个向量,这个向量和D1是平行的,它就说明它落在直线一上,然后我们把这个式子展开展开。

得到这个式子,得到这个式子以后,我们又可以呃,它也是一个关于T2的线性方程,所以我们这个稍微化简一下,就得到了T2长,这样,然后我们直接取P等于O2加T2D2,就能算出来这两条直线的交点位置。

我们可以看到这个这个计算方式,还是比较的简洁的呃,另外有时候我们需要去判断两条线段,它之间是不是相交的呃,除了求出交点,然后来判断它有没有焦点之外,还有没有别的做法呢。

然后借助于这个计算二维的计算几何的算法,我们有这个现在的跨域测试这样一种手段啊,我们取现在一的端点是P1和Q1,取现在二的端点是P2和Q2,然后我们将S1取为Q1减去P1,X乘上P2减P这是什么意思呢。

Q1减P1就是现代一的这个向量,而P2减P1是这个项,然后Q1减P,还是刚刚这个RQ2减P是这个项目,所以他意思是说,我们要求P1Q1所对应的向量,在P1Q2和P1P2这两个向量之间。

他希望这个向量在这两个向量之间,然后S2类似的,我们还需要这个Q2减P2这个向量,这个向量,在这边P1减P2和Q1减P2,这两个向量之间,如果这两个条件都能满足的话。

那么他一定说明这个这两个线段是有交点的,如果这两个是不满足的话,他一定是没有交点,而如果它是取等号的,其实说明焦点就是在端点处发生,我们才会取等号,就是现在的快递测试,然后可以看到这里面。

我们并没有做任何的这个呃除法除法运算,我们就直接是通过这几次差成就,判断了两个线段是不是相交,然后避免了很多这个呃,求出交点,然后再讨论大于零小于零这样的情况,然后既然我们已经会算这个二维的直线。

之间的距离了,那我们再来看三维的线与线之间的位置关系,首先我们来看异面直线之间的距离,然后还是一样,我们先给出两条直线的参数方程,第一个是X1等于O1加T1,D1D2是X2等于O2加T2。

第二然后我们计算这两条异面直线的距离的法,一是求两个直线的公垂线,并且把它投影到这个这个公垂线的,所决定的向量上,这这个事情是是什么样的逻辑呢,比如说我们有一个异面直线是J的直线。

B有个异面直线J的直线A,我们首先求这两条直线的公垂线,也就是我们会求出这个法向normal,然后这个法向normal会决定一个平面的朝向,我们再把B和A上任取一个点,任取一个点。

他们俩之间的这个向量投影到N上,得到的必然就是B和A之间的最近距离,这是法医,然后法二呢就是联立方程,我们索性我们把T1和T2都当做未知数,然后求出它们俩之间的模长的表达式。

然后对这个表达式T1T2分别求求偏导,然后令它为零,这是第二种求法,既然我们已已知异面直线之间距离的计算方式,我们就可以去讨论,意面线段之间距离的计算方式了,呃一面线段呢其实也是一样的。

我们可以把它投影到一个同平面平面内,然后去做快递测试,然后如果它是这个在同平面内是这个相交的,那么跟上面一样,它的异面直线距离,仍然可以用这个法医去求一面,现在距离仍然是这个法医所决定的。

如果它不是相交的,那么它的最近距离就就是发生在端点处,这时候我们还要再重新讨论一下,然后或者呢,如果你觉得刚刚这个方法太麻烦了的话,我们可以把它转换成一个优化问题,求极值,然后现在呢我们已经讲过了。

这个线与线的位置关系,我们就可以去看点与面的位这个位置关系,呃首先我们给出这个要带求解的点和面的定义,然后平面的方程跟刚刚一样好,平面Y有一点X,现在我们要求平面外这一点X到平面的距离。

他其实就等于在平面上任取一个点,然后将这个平面外一点和平面上这一点做差,求得一个向量,再求这个向量在法向的投影,这个距离是不受P点选取的影响,为什么这个点不受P点选取的影响,因为我们知道。

你就算取别的任何一个点,它和P点之间的差值,只会是一个与反方向垂直的向量,因为任何在平面内的向量都垂直于法向,所以你去你就算取这边一点P1撇,然后这P1撇减P得到的量,和N点乘之后都会消掉。

所以这个距离的计算是不受P点选取的影响,而通过这个方法,我们可以计算这个点与面的距离,但是呢如果大家这个在高等数学课上,应该都接触过,高等数学课上会给出一个呃,点与面的距离的计算方式是X加B加C。

Z加D的模长啊,或者是绝对值,然后除以根号下X方加B方加C方,然后这里要给出的这个平面的定义的是呢,是X加BY加CD加D等于零,然后他会说这个距离是这样去计算,然后我我们上面给出了。

这个用点乘和表达的形式,其实和这个形式是等价的,它为什么是等价的,我们其实只要把这个X减P点乘N的操作,给它全部都拆开成分量形式去计算就可以了,我们假设X的三个坐标分别是XYZ。

P的三个坐标分别是PXPYPZ,我们会列出这个式子,这个式子如果你把这个点乘去展开计算,我们就会把它整理成一个X加B为I加C,C加D等于零的形式,并且我们会发现,这个计算式和下面这个计算式是完全一样的。

完全一致,那么我们为什么还要去用这种方式去计算,点与面的距离呢,因为这种方式它是自动适用于二维的,因为呃我们知道二维的这个直线,如果我们把二维的直线定义成X加B,Y等于加ZC等于零的话。

然后二维的直线外一点到直线的距离,应该是什么呀,应该是X加B加C,除以根号下A方加B方,但是这个东西它其实跟这个完全是一致的对吧,就我们完全可以用这一个式子,既去求二维中点与线的距离。

也去求三维中点与面的距离,所以我们在这个计算结合当中,倾向于用向量的形式表达,而不是用这种完全展开的解析形式表达,然后从另一个角度说,就是我们这里给出了一个,这个就是我们定义平面的方式。

是一种影视的表示,而我们定义直线的方式呢,是一种这个参数的表示,其实直线也可以用这种影视的方式去表达,因为我们可以写成这个呃,某一点与直线上某个端点的差,向量和直线的朝向的差乘等于零。

我们也可以用一个映射表达,但我们一般会选择在二维的直线,去用一个参数表达T来表示,而在二维的三维的平面,用一个影视表达X减P点乘N等于零来表示啊,这个原因在于对于直线来说,它的这个参数的选取是很直接的。

我们只要取它的呃方向向量,然后取它方向向量的步长就可以,而对于平面来说,如果我们要给它一个参数表达的话,我们还需要先取平面上任意的两个这个切向量,然后用这个切向量在平面上构建一个坐标轴。

这个过程是相对来说不是唯一确定的,所以我们一般不这么去做,当然用这样去做的例子,我们已经看到了,刚刚我们看到的这个三角形的表达,它其实是一种参数表达,因为三角形的,因为三角形的三个顶点。

刚好给出了一个切向量的表达方式,讲完了这个点线面之间的关系,以及它们距离的求法以后,我们来看这个多边多边形,因为有了点线面,我们就可以去定义多边形了,呃多边形的两个重要参数,一个是周长,一个是面积。

分别要去怎么去计算呢,啊首先最好算的肯定是周长,因为我们只需要去遍历多边形的每条边,然后计算它模长求和,就可以算出这个多边形的周长了,那么多边形的面积要怎么算呢,这里我们假定多边形的面积。

是用逆时针序给出的,比如说在右边我们给出了一个三角形,三角形是最简单的多边形,P1P2P三,这是一个三角形,我们怎么去算这个三角形的面积呢,呃这个我们上节课已经说过了对吧,因为叉乘的定义。

就是还可以用来算二维三角形的面积,我们可以写成P2减P1,叉乘P3减P1,然后再去乘1/2,这样得到的就是三角形AP1P二P三,A123,这个啊P1P1P2P3,这个三角形的面积。

我们把这个面积记作A123呃,我们有没有别的计算方式呢,然后我们还给出了另一种计算方式,这种计算方式看起来貌似比第一种要繁琐很多,我们的做法是在任平面内任取一个点P0。

然后我们去先去计算三角形012的面积,012面积也就是这一块的面积,再去计算三角形023的面积,也就是这一块的面积,然后再去减掉三角形013的面积,就是这块的面积。

然后用这样的方式去得到三角形123的面积,然后如果我们把这个三角形的三个顶点的绕序,不是逆时针序的面积记作负的话,记作负值的话,我们就可以把三角形的面积写作A012,加上A023,加上A031。

我发现了什么,发现这个除了零一直在这个位置不变以外,后面是122331,它相当于正好我们以一个逆时针序,去遍历了三角形的每一对顶点,然后这是最简单的三角形面积的求法,我们再来看凸多边形的面积。

比如说右右边下图给出了一个凸边凸多边形,1234,我们想求它的面积,那么最简单的求法是,我们先去求三角形123的面积,再加上三角形134的面积,把这两部分的面积相加,就能得到整个凸多边形的面积。

但是和上面一样,我们也可以任取这个平面内一点P0,然后把这个多边形的面积表示成012的面积,加上023的面积,加上034的面积,在加上041的面积,实际上是减去014的面积。

也就是我们可以把它写成是012012,也就是这个三角形的面积加上023,这个三角形的面积,加上034,这个三角形面积减去014这个三角形的面积,发现规律都没有规律。

就是我们可以把他的任何一个多边形的面积,写成A0IJ,然后这里的IJ是逆时针序曲变,这个多边形的每个顶点,我们为什么要这样去算多边形的面积呢,因为我们并不能保证这个多边形,它是一个凸多边形。

对于一个凹多边形来说,对一个凹多边形来说,我随便给出一个凹多边形,对于这个凹多边形来说,我按照这个前一种方法是求不出来,这个正确的面积,就是按照这个图标圆形面积,这种求法我是得不到结果的。

当然这里并没有,并不应该有中间这条边,再有这条边,大家就会散,但如果没有中间这条边,这时候与其你想怎么去把它剖成三角形,你不如直接在平面内随便取一个点,然后按照刚刚所说的这个方法去算,这个求面积方法。

无论对于凸多边形还是凹多边形都是适用的,接下来我们再来看点和多边形的位置关系,首先我们刚刚已经给出了一个,求这个凸多边形面积的方法了,那么我们发现一个规律,就是说,如果我们取的这个点还是刚刚的这个例子。

如果我们取的这个点在多边形外的话,然后我们按逆时针序去计算,012023034041这些三角形的面积,我们会发现这些三角形的面积,如果我给它都取绝对值相加,也就是说,我认为01A041等于A014的话。

就是这里这个三角形,我们会发现这些三角形面积相加,是大于等于整个多边形的面积,而相反,如果我们这个参考点取的是在多边形内部,我们再用它和每个顶点的,绕细的三角形面积相加,它是正好等于这个凸多边形面积。

也就是说,如果我们能够把A和按A和A撇两种方式,因为A的方法,这个上面的这个方法得到的就是多边形面积,根据我们前一页PPT所讲,它就是多边形面积,而A撇是这个上面这个东西。

在求和过程中取了绝对值之后的结果,如果它和上面的A是相等的,那么我们取的参考点一定在多边形内,如果他取的参考和上面的A是不相等的,那么他取的参考点一定在多边形外,因为此时才会出现有的三角形的面积是负数。

这样的情况,对于凸多边形来说,除了面积法以外,还有绕叙法,比如我们给出一个在多边形内部的点,那么对于这点来说,每一条线段其实都在这个点的右边,或者说这个点在每一个多边形的边,所对应的线段的左边。

比如说这个是P0,然后P2减P1叉乘P0减P是大于零的,它是在往左转,同样的P2减P3叉乘P0,减P3到P2叉乘P0减P2也是大于零,然后我们P3P4减P3,P1减P4都是一样。

这个P0点在每一个边的对应的向量的左边,然后这个时候,这个P0点就一定是在多边形内部,但凡这个P0点不在任何一条边的左边,那么这个点他就不在这个图多边形的内部,然后上面的这个判断关系。

很容易拓展到三维里面,也就是说对于多面体的,这不是面积啊,这是体积,对于多面体的体积,或者点与凸多面体的位置关系,它都都是可以完全适用的,对于多面体的体积怎么算,我们可以去把这个A0IJ改成V0IJK。

把这个有向三角形改成这个有效的呃,那个四面体,而点与凸多面体的位置关系也是一样,如果这个点在凸多面体的每一个面的左边,就跟我们之前定义过半平面的概念,如果它在每一个凸多面体的半平面的,同一个方向。

那它一定就是在这个凸多面体的内部,否则它就在这个凸多面体的外部,然后呃,解决了这个点与凸多边形的位置关系的问题,以后,我们再来看点与任意多边形的位置关系,这个时候它它的解法就不是那么的自然。

它就是需要稍微需要一些,这个就是一些比较精巧的经验,一般而言,我们去考察点与任意多边形的位置关系,有两种算法,一种是这个光线投射算法,一种是回转数算法啊,这两种你可以看这个名字就看起来非常图形学。

首先光线投射算法,光线投射的算法是基于这个若尔当曲线定理,罗小刚限定理说,任何一条简单的B曲线可以将平面分成两部分,然后连接同一部分的任意两点的弧,与该曲线不相交,或者相加偶数次。

我我们怎么就是说怎么去举这个例子呢,我们可以画一个圆代表平面,然后一个简单的B任何一条简单的B曲线,他把这个盐的里面分成了两部分,那么连接同一部分的任意两点的弧,比如说连接这两点的弧,它要么是这么走。

不和这个里面的部分相交,要么和和这个简单的B曲线相交两次,或者你也可以这样绕出来再绕过来再绕过去,他反正相交都一定是偶数次,而如果是起始点在这里,而终止点在这个区域内的话。

它相交相交这个必须线的次数一定是奇数次,所以如果我们现在在判断点与多边形,位置关系的时候,我们把这个多边形就取成上面这个raw曲线定理,里面的简单闭曲线的,我们把从判断点出发,随便发一条射线。

把这条射线当做唱片曲线定义里面的糊的话,那么这个弧每与多边形相交一次,都会改变一次内外关系,而且无穷远点一定在多边形外,因为这个多边形是是一个有限大的,这样的一个图形嘛,所以无穷远点一定在多边形外。

此时我们就会得到这样的结论,一是相交点个数如果是奇数,那么点就在多边形内增加点个数,如果是偶数,那么点就在多边形外,我们可以看右边这幅示意图,我们要判断的点在这里,然后从这点出发,我们随便发一条射线。

它与这个多边形相交一次,然后这时候我们认为它是在里面相交,又碰到这里,放到这里两次,我们现在认为在外面,然后里面外外面里面外面,然后最后这个这个这条射线,只和多边形相交了偶数次。

所以我们就说它是在这个这个点,初始点是在多边形的外面,这里我们需要思考一些特殊的情况,比如说如果该射线与顶点的边是重合了,该怎么办,比如说我们要判断下面这个四边形里面,这个Y这个点。

我们判断这个Y这个点,它是在多边形内还是多边形外,那么如果我们取的射线正好是与X轴平行的,那么它就会撞到C这个点,那你撞到C这个点,到底算相交一次还是算相交两次呢,这个问题就很难处理。

然后其实最简单的解决方案就是,我们取射线的时候,我们不要取沿X轴对吧,我们把这个射线的夹角取成派的无理数倍,这样它重合的概率就几乎为零了,或者呢有一个更加健壮的算法,是我们规定涉县和射线以上的点在上方。

否则在下方,也就是说我们认为C这个点在射线的上方,然后当这个我们所发出的射线,与多边形的某条边相交的时候,只有这条边的两个点分别在上方和下方,我们才算相交,然后这时候我们看这个Y往右发的这条射线。

和CD这条边相交相交的时候,C和D这两个点都在这个射线的上方,所以我们不认为这个射线与CD这条边相交,而CB分别在上方和下方,我们认为这条射线与CB这条边相交,然后最终判断的相交次数就是一。

因为相差次数是一,所以我们说这个点是在多边形内,然后我们再来看这个刚刚这个定义方法,对于D这个X点这种情况是不是也是成立的,因为X点往右发一条射线会正好打到D,然后根据我们刚刚的判断法。

D这个点它是在射线上的,A点,在射线下,C点在射线下,所以X往右发射的这条射线和AD相交,和DC也相交,所以它和整个多边形的相交次数是二,所以我们判断X在多边形外,那这个算法就可以规避掉。

这个射线与顶点边重合,这样的所带来的数值上的问题,除了刚刚我们所说的这个光线投射法外,还有这个回转术法,回转数法是说一个曲线绕过某一点的次,是用一个曲线绕过某一点的次数。

来判断这个点是在多边形内还是多边形外,对于多边形内的点呢,多边形绕过该点的次数是一,对于多边形外的点的多边形,绕过该点的次数为零,然后这个事情是怎么看呢,比如说这个点是这样的,如果是个三角形形。

诶我们看到我们沿着三角形边走走一圈,正好绕过了这个点一次,而如果这个点在多边形外,比如说我们判断点在这里,然后我们会发现这个多边形绕,绕着它逆时针走一圈,最后绕着这个对于这个点来说绕了零圈。

那么如何去计算这个回转数呢,回转数其实它就等于回转角C塔除以二派,回转角,计算方式就是我们对于每一个多边形上的点,比如说多边形上的边,多边形上边对每一条多边形上的边,比如说这条向量。

这个向量对这个向量我们去求,这个夹子,这个夹角这个夹角我们叫它CAI,然后我们把每一个C塔I相加,就是西塔二了,就是CA3,就是西塔一,西塔一加西塔二加CA3,加起来正好等于二派。

所以它的相交次数是一啊,他的这个回回转数是一,所以它在多边形内,然后再看这个这个地方,这个地方的问题就在于我们先考察这条边,这条边是给了一个正的数,就是这个角CA1是正的,这个角西塔二是正的。

然后我们再来看这个角CA3的时候,它变成负的了,这个角C加四也是负的,这个角CA5也是负的,然后它们相加,正好抵掉了CA1和CA2这两个正值,所以最终得到的结果就是00÷20,这个回转数是零。

所以它在多边形外,而一般我们在算回转数的时候,会定义这个回转数的方向,也就是说我们逆时针绕一圈才认为是一,如果我们是顺时针绕一圈,会认为它是一,比如说我们在右边,右下角就给出了不同的回转数的可能。

然后也存在一些回转数大于,就是回转数绝对值大于一的情况,比如说这个呃左上角这个二,我们可以看到它绕过了中间这个点两圈,但是因为我们考察的是多边形对吧,一个简单的多边形是不可能自己和自己相交的。

所以对多边形来说,它只它对于任何一个点的环绕数,只有可能是一或者零,这就是火战术撒,然后给出了这个呃,判断点是不是在多边形内的算法以后呢,我们再来看看这个点和三角形,倒三角形的距离该怎么去算。

而这个过这个问题其实是一个很经典的问题,比如说在同学当中,我们有一个mesh,我们的mesh它是由三角形面片组成的,现在我要求一个点插到这个mesh的距离,那我们其实就相当于对于这个mesh上的。

每一个face,我们都要求这个点到这个face的距离,然后再求它的最小值,所以呃点到三角形的距离,这个问题对司机来说是很重要的,一个计算几何的应用,那么跟之前一样,我们先看二维情形。

在二维中就是这个平面当中,比如说平面当中有许多点,如果点在三角形内,那么显然距离是零啊,那么如果点在三角形Y呢,我们首先设距离是点到这个顶点位置的最小值,比如说右边我们求P3这个点到V1V2V零。

构成三角形的距离的时候,我们先求P3和V0V1V二,分别求它的距离,我们先把这个最近距离,设置为这三个值的最小值,然后我们再将什么呢,我们再将P3给投影到每条边上。

比如说P3投影到V0V2所在的这条边上,我们会得到这个点,我们发现这个投影点在V0V2的延长线上,那么这个点就不就说明这个同一点就不需要,然后RG3投影到V1V2这条边呢。

诶我们发现它的同一点没有在延长线上,它就在V1V2之间,这个时候我们就用这个点到这条边的距离,去更新刚刚我们求得的最小值,做完这两步以后,得到的距离就是点到三角形的最近距离。

那么能不能把刚刚这个过程给拓展到三维呢,其实是很简单的,就是我们首先就把一个三维的,比如说我们考察这个空间里的P0,这个点,我们想计算他到这个V1V2V零,这个三角形的距离要怎么算呢。

我们先把它投影到三角形所在的平面,如果这个同音点是在三角形内的,那么就知道这个距离就是点到平面的距离,如果这个同一点在三角形外呢,那这个距离其实是不是,它就相当于是这个投这个投影距离。

加上这个投影点到三角形的距离,然后我们用勾股定理算一下就能得到这个距离,所以三维情形和二维情形,几乎是就是只多了一个投影的过程,当然上面这个方法是不可避免的,会有一些讨论的。

就是我们需要去讨论这个二维情况下,点到三角形各边的投影距离,投影的那个点在不在延长线上,这个问题这个问题是回避不了,那么有没有一些就是不需要讨论的方式呢,那还是一样的,我们可以用利用三角形的参数表达。

把它转化为优化问题,因为我们刚刚说对三角形的任何一个内部的点,它其实是满足他等于UP1加VP,二加WP3,这样会给出三角形中任何一个点的表达表达式,然后我们把这个表达式和直线Y的啊。

和这个三角形外的那一做差,我们就会得到一个优化函数,我们现在就是要在这个U加V加W等于一,且他们都大于等于零,这个约束的情况下,去求上面这个优化函数的最小值,然后这样它就会变成一个优化问题啊。

关于优化问题如何去求解,这是我们这个这个学期课后面的内容,然后就是还是如果我们从图形学出发,刚刚我们给出了说有一个mesh,我们求这个点到mesh的距离,而现在我有两个mesh。

我想求这两个mesh之间的距离该怎么办,然后对,这个,二维情形来说,二维的两个三角形的距离,二维两个三角形它之间的距离应该怎么算,其实他们既然已经给出了点到三角形,具体的表达方表示方式。

我们其实可以把它写成三角形的三个顶点,分别对另一个三角形求一遍最近距离,然后再倒过来,用这三个顶点去求一次到这个三角形的最近距,然后这两个最近距离求最小值,就是这两个二维三角形的最近距离。

在这个过程当中,我们用到了一个定理啊,这个定理的证明就是我们不在这里给出,但是它可以很直观的理解,就是说两个二维中的三角形的最近距离,必然其中一个三角形要取到顶点上,呃如果你不相信这个定理的话呢。

还有另一种求两个三角形距离的方式,我们可以用18组点边距离的最小值来决定啊,好像这还是要建立在这个定理的基础上,就是呃除了求点面距离方式,你还可以用任何一个三角形的一个顶点,和另外三角形的三个三条边。

分别求一次最小值的方式来计算这个二维当中,两三角形间距,而这一切都建立在二维当中,任何两个三角形的距离,其中一个三角形必然要取在顶点上这个性质,然后在三维当中呢,跟二维是类似的。

我们可以取六组点面距离的最小值,然后或者呢我呃但是在我们就没有这个或者了,我没有这个取法,并且在二维当中,这是完备的,你取六组点面就已经找到了最近最近距离,就一定能保证你能找到最近距离了。

但在三维你取六组点面,不一定能把最近距离找到,因为你还要去考察九组边边的情况,我们可以看右图,右图上面的这个三角形,和下面这个三角形的最近距离,取代这个H和下面这个这个点,是在这个点和这个点上。

它们最近距离取在BAB这条边和,ED这条边的最近距离上,而并不取在任何一个顶点上,所以对三维来说,我们要把它分成两种情况去考虑,一种是取在顶点上,就是六组点面距离的最小值,和九组边边距离的最小值。

造型的距离,在就刚刚我们说的mesh to mesh的距离,它有什么用呢,在cg当中,它最主要的作用在碰撞检测上,然后在碰撞检测里面,我们一般会将碰撞检测分为两种,碰撞检测,第一种叫离散碰撞检测。

Discrete creation detection,我们简称DCD,然后第二种碰撞检测叫联系碰撞检测,然后就是continuous collision detection,我们叫CCD离散碰撞检测。

它在字面上就是说,我们要求两个三角形网格之间的距离,也就是说它的我刚刚已经给出了,离散碰撞检测的最基本的算法,那么连续碰撞检测是说,三角形网格的上的每一个顶点呢,它不仅有位置,还有速度。

比如说这些顶点它都有速度,而现在我想知道这两个三角形,经过多长时间会接触,这要怎么去算呢,我们要去考察上面还是一样的,我们要去考察这六组点面和这九组边边,我们要去计算他们都到什么时候会共面。

我们可以把这个方程给列出来,去判断他们什么时候会共面,然后在这个共面的方程,都会对应一个一元三次方程组,去解读这个时间T以后,我们再判断共面时是否解除这个算法,还是相对来说在实现上比较困难,然后呃。

感兴趣的同学可以去参考我,这个我们games的103的课程,讲完了三角形之间的距离呢,呃我们还要提一下这个德罗内三角剖分的概念,这是一个定义在二维上的内容,三角剖分是说我们要将点击连接为三角网格。

使得各个三角形的边呢是不相交的,比如说右右图这里有很多顶点,只有顶点只有顶点,然后我们要把这些顶点连起来,连成一个三角网格,然后并且这些边之间不不交叉,它是一个简单的网格,所谓德洛内三角剖分。

是说它它是以满足以下性质的三角剖分,第一个叫空源性,你们可以看到任意三角形,它的外接圆内都没有别的点,然后第二个性质叫规则化,它的这个所得的三角形的最小的角是最大的,在所有的三角剖分中。

我们可以证明德洛内三角破分所得的三角形,这三个内角当中的最小值,所有的三角形内角最小值取min是最大的,国内内三角剖分还有一些其他的性质,首先是所得结果,唯一就是不论你用什么算法求求得得。

那三角后分一定是一样的,然后第二个性质是,我们对它增删改顶点都会只影响这个局部,就我新加一个顶点,他顶多他顶多影响这个,他顶多会把这个原来的这个破分给翻转,但是不会影响到别的定位,并且三角剖分的最外层。

一定会形成一个凸多边形,就是它会给出一个最外层是凸多边形的,这样一种破门方式,三亚婆粉有一种对偶图,它的对偶是说它的对偶图叫沃罗诺伊图,沃罗诺伊图是它的目的是将平面划分为若干个。

由最近的控制点决定的区域,比如说右边这个图,就是我们保证平面内的任何一个点,它所属于的区域都是离他最近的那个点,那个点控制点典籍当中离他最近的点,如果我们对平面中的每一点都这样操作的话。

我们所得到的就是右边的这个图,这个图叫乌洛诺伊图,很容易可以证明,沃洛诺伊图就是德勒内三角剖分的对偶图,什么为什么是得到那三角部分的DIO图呢,其实它就相当于怎么去决定这些控制点呢。

它其实就是在这个三角剖分的每一条边,我们取它的中垂线,每条边去中垂线,然后这些这些中垂线会自然地相交,它们相交的结果就会形成下面的沃罗诺伊图,然后求三角剖分的算法比较的繁琐,然后呃。

而且我就是它已经超出了这个数学的范范畴了,它本身就是统计学的一部分,然后大家可以看这个games系列的其他课程,然后这里就是稍微带过一下,这个三角剖分的概念,在三角剖分以外呢,我们来看凸包。

首先我们来看二维的图表,二维图表的定义是,在平面上能包含给定点的最小的凸多边形,我们叫它粗暴,比如说右边这五个点所构成的这个典籍,我们想用一个最小凸边形把它包括起来,左边这个包括是不对的。

因为它不是凸的,而右边这个包括它就是一个凸多边形,然后其实在图形学当中,我们往往会用一些比凸包稍微放宽一点的,这样的结构,比如说轴对齐包围盒,也就是ABB它的定义和凸包非常相似,它也要包含给定点。

只不过它不是最小的凸多边形,而是与坐标轴平行的矩形,你可以看到右边这幅图,我们包含所有典籍的与坐标轴平行的矩形,是最外面的虚线,而包含这些典籍的这个凸包呢,我们可以换一,就这样一个对吧,那显然可以证明。

这个凸包一定是在轴对齐包围和之内的,所以轴对齐包围盒是凸包最粗糙的近似,有没有稍微厉害一点的,稍微厉害一点的,就是方向包围和方向包围盒也是要求是矩形,但是他放宽了轴对齐这个限制。

也就是我们这个矩形可以这么倒着取啊,当然我这个取法不一定是最优的,就是示意一下,就是对刚这个我们可以这么去取就行,哎,这个矩形说不定比轴对齐的矩形要小,所以它的定义方式,就是包含给定点的最小值的矩形。

这个最小的矩形不一定要是与坐标轴平行,然后除了以上两种包围盒以外,还有固定方向图包,固定方向图包和正常的图包最大区别在于,我们要求凸包的各个边或者是面,它怎么在法向只能在给定的集合当中选取。

那么从这个角度说,所谓轴对齐包围和,它岂不是它就是一种固定方向的凸包,对我们要求这个凸包的各个边,只能有这么几条边,只能有这几种边,这个这几种面我们用这几种编组合得到的凸包,所谓凸包就是轴对齐包围和。

然后如果我们放宽一点限制,比如说我们允许它斜45度,然后用这样的边拼出来的图形,他就是这个更广义的这个固定方向图包,它就会比轴对齐爆,为何要更接近我们真正的图包,当然啦在二维当中,其实去求准确的图包。

也不是一个非常困难的事情,呃对二维来说,我们观察这个二一个二维的典籍,我们会发现点击中纵坐标最小的点,它一定在一定在凸包上,点击中纵坐标最小的点一定在就是这个P点,他一定在这个图包上,为什么。

因为它底下没有别的点了,所以我们的凸包正好过它是最优的,同时我们发现在凸包上,逆时针走所经过的边一定都是左拐,但这都不需要管产,因为这都是通报的定义,我们需要它是这个简单的凸多边形嘛。

所以它逆时针走所经过的边一定是左拐,但是根据这两个性质,我们就可以去建立这个隔离横扫描法,也就是说,我们既然已知做这个图标上必然存在点一点,我们就把这个最这个纵坐标最小的点,P0先给压入这个站中。

然后我们把别的所有的点呢,按照对于P点的这个几角排序,也就是按几角排序,ABCD它们都是就是PA转到PB,PB转到PCPC转到pd,他们的几角是逐渐增大的,好现在我们去维护一个站。

我们先将P压P和A压入栈中,然后我们来考察哦,我把这个也标上去,这是零,这是一,这是二,这是三,这个就先写四吧,我们先考察这个P2点,然后我们发现从PA到ab是左转,他解释说他是符合凸包的性质。

所以我们就直接把这个B点入站,然后再来考察C点,这个从然后现在的栈顶是什么,栈顶是B点,然后站的第二个元素是A点,也就是说AB到BC是左转的吗,也是左转,所以我们把C压入栈中。

下午再来考察地点也从BC到CD是左转的吗,不是左转,这时候是右转,这时候是右转,右转我们就弹出栈顶C,然后我们再去判断从ab到BD是左转,是左转,然后我们把D压入栈中,然后重复上述过程。

直到我遍历完所有的点,我就一定会得到一个图包,这个算法的复杂度是n log n,它的主要的这个时间代价其实是几角排序这一,那也就是说只要你们排序能够做得更快,这个复杂度还能再降。

这个方法的效率是比较高的,然后我们再来看三维,三维就没有那么好的性质了,因为我们三维不存在一个几角序,那么我们怎么去构造图包呢,一个最简单的算法是增量法,就是我们要求N个点的图标。

我们先假定我们已知N减一个点的图标,我们考察一个新点,如果心点在图包内怎么判断呀,这个我们之前已经说过了对吧,它只要判断在每一条边的左啊,每个面的左边它就在左图包内,如果他在图包内呢,那么图包是不变的。

如果新点不在图包内怎么办,我们以该点为光源,比如说我们这个星点是这边这个pr,这个点我们以该点为光源,从这个点发射向四面发光的光线,那么它一定会在凸包上形成一个明暗的分界线,也就是并且这个明暗的分界线。

一定是凸包的棱组成的,也就是说这个凸包因为有很多小面嘛,这些面片要么能被这个光光源照到,要么不能被这个光源照到,然后我们怎么办,我们把亮面全部删除,然后连接顶光源和分界线,我们就能得到新的图包。

就图一做投影,然后我们把这些亮面都删掉,然后把把这个点和这个这些能连起来,我们就得到了加入了这个星点之后的图吧,然后这个算法的复杂度,可以证明它是N平方级别的,因为我每次考察一个星点的时候。

我要考察它和每一个面是否在每一个面的左边,然后还要遍历每个边,再去考察他是不是在每个边的啊,每每个边能不能被这个光源照到,所以这个复杂度就就是不可避免的会比较高,如何处理去多点供电的情况呢。

呃就是其实没有什么特别好的办法,一般大家的处理方式,都是在把输入的点进行一些随机扰动,去得到这个点共鸣,去避免这个点共鸣,然后三维图包还有一些其他的算法呃,比如说这个暴力法,暴力法其实是是这样的。

就是我有个典籍,典籍里面有N个点,那么这个N个点会构成CN3个三角形对吧,然后这个to bond凸包上的三角形,一定是由这CN3个三角形中的一些,三角形组成的。

所以我只需要去便利这CN3个三角形中的每个,三角形去判断它在不在图标上就可以了,怎么判断它在不在图包上呢,只要所有的点都在这个三角形的左边,它就在图包上,要么要么在这个就是这个三角形的顶点。

要么在它的左边,它就在图包上,然后我们这样去遍历每一个三角形,在判断它在不在图包上,诶这个这个方法,它就是它就能找到这个三维图包,然后很自然这个算法复杂度是N次方的,然后三维通报其他算法。

还有这个快速突破法,快速逃跑法,其实和增量法是这个逻辑上是完全一致的,只不过我每次选择的这个点,它不一定是这个随机的点,它们每次会挑一挑,把它挑成最远的那个点,就离当前凸包最远的那个点。

然后以这样的方式,我们能保证这个三维凸包的复杂度尽量的低,这叫快速图包法,但是呃这个快速图表法实现并没有那么容易,呃,现在的一些这个开源的计算机和库吧,一般都会有这个快速图包法,也包括前面的三角剖分。

大家可以直接调这些库就能去完成他们的计算,然后讲完凸包以后呢,我们再回到这个2D上去,看这个平面最近点对的问题,然后这个问题其实呃,我今天不打算在这里细讲了,因为其实它有这个在图形当中呢有应用。

但是呃可能大家更喜欢去写KDK对吧,因为kd tree不仅能适用于二维,也适用于三维,而且KTT不仅能找最近点对,还能去找别的一些东西,嗯而且最重要的是平原最近点对,是一道分支的经典例题。

然后大家再讲这个大学的呃算法课的时候,应该也都会学过,所以我们今天就跳过这一部分,来看一下最小圆覆盖,刚刚我们给了凸包,刚刚我们从凸包这个凸字到底应该按什么笔顺,写ABB,Oh bb。

还有这个定向图包对吧,那么如果我不用这个矩形,我能不能用圆去覆盖,我能不能去求包围该定点集的最小的圆呢,诶他也是可以修的,那么我们来看这个最小覆盖圆有什么性质,首先还是一样,凸包一定在最小覆盖圆内对吧。

然后最小覆盖圆它只有三种可能,第一种是圆心在某一点处半径为零,也就是说这个点其中只有一个点,那么这个最小覆盖圆就是圆心是它半径为零的,这个圆,或者是圆心在两点的中点处,直径是两点的距离。

或者是圆心是三个点所决定的,Why,这个三三角形的外接圆的半径,是这个外接圆的半径,只有这三种情况,我们可以感性的理解一下,比如说呃在右边这幅图,如果我一开始求出来的这个覆盖,原是最外层和这个圆。

如果我们先除的是最外层这个圆,那么这个圆显然不是最小,我们可以不断的缩小半径,直到它变成,街上中间的某一个点,然后接上中间某个点之后呢,我们发现这旁边都是空白,这边都是空白。

所以我们把这个圆心再移动一下,然后使得有正好有三个点落在这个圆上,那么这个得到的就是一个最小覆盖,然后对于其他的情况,比如说这边就如果我们把看考察这个情况,他最终得到最小圆,是以这两个点所构成的。

连线为直径的这样一个圆,他的圆心是在这两个连线的中点处,以上就是最小覆盖了所有的情况,那么最小覆盖圆是不是也可以增量构造呢,其实是也可以和图包一样去做这个增量构造,那么如果给定了一个N减一个点的。

最小覆盖圆的话,那么第N个点要么在上述圆内,或者呢这个新覆盖一定给我改点,这也很容易理解对吗,比如说我们考还是这个这里这个覆盖源,如果我们的我们新加一个点在这个覆盖原内,那我们就什么都不用做。

如果我们新加的点在覆盖圆外呢,那么我们这个覆盖原一定要过这个点对吧,因为也没有比他更靠外的点,所以他一定要过这个点,然后呃最小圆覆盖的算法是什么样的呢,呃其实是相当暴力的一个做法啊,就是三层循环。

我们先假设这个结果就是P1,这个点为圆心半径为零的这样一个圆,然后我们从二到N开始,如果呢PI是属于这个圆的,我们就直接进入下一次循环,就直接I加加就完事了,如果PI不是属于这个圆的,我们就得构造了呀。

然后我们说这个pi不是这个圆,说明它一定在圆上,我们先把这个圆取成以pi为圆心半径为零的圆,然后我们再回头去看,从一到2-1这些点,如果借在这个圆上呢,就直接下一次循环,如果J不在这个圆内呢。

我们就以IJ为直径去建立一个圆,那么它一定包含I和J这两个点吧,然后我们再进入下一次循环,如果pk属于这个圆呢,那我们就什么都不做,如果pk不属于这个圆呢,我们就构建一个以IJ。

K3个顶点为三角形的外接圆,就直接这么暴力三重循环就完事了,我们能保证最后找到的这个圆,最后找到这个圆一定是最优的,最下腐败,这个方法时间复杂度并不是N3方,而是ON的,这是很神奇的地方,为什么呢。

因为我们刚刚已经说过了,最小覆盖圆,它只有三种不同的情况对吧,我们要么用一个点,要么它是一个点,一个点半径为零,要么它是两个点,然后半径时距他们俩的距离除以二,要么是三个点,三个点直接确定一个外接圆。

所以说明什么,说明这个最小圆并不是可以任意取的,我们其实如果暴力去计算的话,我们其实只需要判断CN1加CN,二加CN3种情况,也就是只需要三个特定的点,我们就能够确定这个最小覆盖量。

那对于每次我们去看考察,要不要进入下一层循环,进入下一层循环的可能是什么呢,为进入下一层循环,只有可能在于我们当前构造的这个最小覆盖圆,必须过,比如说必须过A点,必须过A点,或者是必须过界点。

我们必须或者是必须过K点,他们的概率都只有O2分之三或者是借分之三,为什么呢,因为三个点就可以确定这个最小覆盖圆,那么如果我说这个最小覆盖圆一定要过界点,那么岂不是说,这个节点在这个这三三个点之内吗。

对吧,也就是他每次下进入下一层循环的概率,就是我当前要这个典籍的大小分之三,它只有这么多的概率会去建立一个以下一个点,为在圆上的这样一个情况所建立的圆,啊这概率只有3/2,所以我们算一下。

如果我们它就相当于是N3方,乘上这个N分之三,再乘以N分之三,最终得到的复杂度是9N,所以它是希望时间表达的都是线性,而并不是N立方的算法,当然这个复杂度的证明,可能稍微对大家来说不是那么直观。

如果理解不了,没有关系,大家只要知道这个最小圆覆盖,可以以ON的时间复杂度,用三层循环就解决就完事,然后这个最小圆覆盖是可以,直接拓展到最小球覆盖上,把二维拓展到三维。

其实三只是把三种情况变成了四种情况,除了刚刚我们所说的这个三种情况以外,我们还多了一个四点确定球面的情况,现在有哪四种情况呀,第一个情况还是一个点,他为球星半径为零,第二个是两个点。

两点的中点是球星半径,是这两点距离的除以二,然后第三个情况是,以这个三个点的外接圆为这个球的最大的圆,然后以这个外接圆的半径为这个球的半径,然后第四种情况就是由四个点所确定的,球面就是最小球覆盖。

而且最小球覆盖,因为我们进入下一层循环概率仍然是这么多,这个不变,所以随机增量法的期望鉴定复杂度仍然是不变,它仍然是线性,我们可以在线性的复杂度内构建最小球覆盖,但是求最小球覆盖的最大的难度。

困难点并不是这个复杂度高,而是求外接球的过程并不像求外接圆那么容易,事实上求外接圆本身也不是很容易的,而求外接球就更快,更更难算了,所以啊我们还可以采用模拟退火法,我们直接去随机圆和球星或者球星的位置。

然后我们对每个位置,如果我们球球星是给定的话,那么半径它就是到点击里面,每一个点的距离的最小最大值,然后我们可以去自由化这个圆,或者是球星的取取向,以这种方式来求最小圆覆盖或者最小球覆盖。

最小球覆盖或者说最小圆覆盖有什么用呢,它其实和我们之前所说的三角形和三角形距离,是有关系的,比如我们在做这个碰撞检测,或者是光线做渲染的时候,要求这个呃光线相交,我们都是要先判断一个点和某个三角形是一。

或者一个射线和某个三角形是不是相交,但这个过程会很麻烦对吧,我们需要一个数据结构去先粗糙的判断一下,它跟一大片三角形是不是相交的,如果它跟一大片三角形不是相交的,这一片三角形我都不用看了。

那么对于这一大片三角形,我需要一个数据结构来表示它,那怎么表示这一大片三角形,最精确的表示方法,就是求这一大片三角形的图包,然后稍微弱一点的取法就是ABB,或者是OBB,也或者是求覆盖。

然后呃求覆盖呢其实是一个更多的用在我呃,就是在同学当中,我把职业的墨迹擦一下,在同学当中呢,一般我们在做光线追踪的时候,好像写错了,我们是用AABB的,主要是用ab,然后在实时碰撞检测的时候。

我们是用这个球覆盖,因为对球去做它的碰撞检测是最容易的,也就是我们现在不把这个三角形看成三角形,因为我们之前去求三角形相不相交,或者是距离是什么的,那个算法太复杂了,那么就把这一片三角形看成个球。

我们直接去判断这两个球是不是相交的,如果这两球相交,我们就认为这两个半是碰撞,当然这一个mesh,我们可能还会有很多很多个球啊,不只是一个球,然后如果这些mesh都没有相交呢。

我们就认为这两个麦是这些球都没有相交,我们就认为这两个麦是没碰本,那他们具体怎么决定,这个球,就是可以用我们这里说的原覆盖,或者是球覆盖算法来决,而最后呢我们来看一下繁衍变换。

繁衍变换是说呃所谓繁衍是定义在点上呃,给定了某一个繁衍中心O它是一个顶,它是一个点,一个繁衍半径R它也是个实数,然后他其实给定了一个球或者是一个圆吧,在二维中,每一个顶点,每一个每一个空间当中的点。

关于这个圆都会有一个繁衍点,比如这里的P点和J的P1撇点,它就是反应点,一点和它的繁衍点之间呢会满足下面两条性质,第一点他们三点是共线的,第二个呢是它们到圆心的距离相乘,等于半径的平方。

那么很显然一个圆O内的点,它的繁衍点一定在圆OY,一个圆OY的点反应点一定在圆O内对吧,因为他们俩相乘等于平方嘛,那么就是D小于零,D1小于零,那么第二呃,第一小于R,D二一定大于R。

才能保证第一乘D2等于R方嘛,然后我们来看这个原这个繁衍,它的最重要的应用是什么呢,我们可以看一个过圆,这个反演圆的圆心O的这样一个圆,这个圆的繁衍是一个不过圆心O的直线,我们可以稍加证明一下。

我们先写出这个呃过点O的圆的表达式,它的方程是上面这个方程,它圆心我们设为X0Y0,然后我们既然说这个原点是在这个蓝圆,蓝色圆上,那么其实就是说X等于零,Y等于零的时候,它在圆上就是X0方加Y平方。

要是A方,然后我们它的繁衍关系是XY会被繁衍成X撇,Y撇,然后它们的坐标分别用R方比,X和R方比Y来给出,然后把以上式子联立就能得到这个绿线,它对应的直线方程,倒过来也是一样的,就是我给另一个不过圆的。

不过点O的直线,它反映之后一定是一个过点O的圆,那么这个东西它有什么用吗,我们如果我们想求过两圆,外一点与两圆相切的所有的圆,比如说,对,就比如说我们要求这样的已过这个点画一个圆。

要求这个圆和这两个圆都是相切的,这有几种画法,我们想求这个问题怎么办,那么其实我们知道我们就可以以这个点,为圆心,然后以任意大小的半径去做繁衍,那么所有的过这个点的圆都会变成直线。

而所有不过这个点的圆都会还是一个圆,然后最终我们就会变成两个圆,求它的公切线的问题,这比两个圆去求它的公切圆要简单多了好,这就是一个繁衍变换直接应用,但其实繁衍变换它在图形学当中的呃。

就是可能用处没有那么的大,但是如果我们换一个视角去想,其实繁衍的意义它可以用在它,它是什么呢,就是我们平时说镜像,镜像就是中间的平面左边的某一个点,经过镜像会得到这个点,就是P和P1P。

而繁衍呢就是圆内的某一个点P,它经过圆这个作为一个某种镜像,得到了一个点P1P,所以繁衍的意义它其实就是几何图形,关于球的镜像,而不是关于平面的镜像,然后我们后面再讲到微分方程求解的时候。

我们会说到格林函数法,也就是变向法,这个方法,其实它还在很大程度上和这个繁衍变换之间,是有共同之处的啊,到时候大家再来体会,然后繁衍变化,这个就是做一个知识的科普,并没要求大家去掌握。

好今天的主要的内容就是以上这些,然后参考资料主要是清华大学的呃,这两本计算几何的教材,然后呃刚刚我们课程中提到了王华明老师的games,103当中的lecture。

零九主要讲到了关于碰撞检测的相关的内容,是和我们今天所说的这个求三角形距离,是相关的,同时应该是在闫令琪老师的这个games101里面,也会提到这个关于ABB的构建之类的内容。

在求这个呃光线与这个mesh的香港,要检测的时候,还有课后练习啊,就是我们并不会每一节课都布置作业,因为那样的话这个大家做起来就要耗时太多了,所以我们这节课是没有作业的,如果大家希望呃。

去练习一下这节课所讲的内容的话,这里推荐了一些就是北大的开源评测系统,上面的这个一些练习题啊,大家可以按照下这些题号去刷,大家有什么关于本次课程的问题吗,这次课程应该还是比较简单,啊这个作业在哪里找到。

这个作业都是这个主播以前刷过的题,啊这些有有简单的,有难的,有简单的,有难的,有,你看那个上面什么通过人数比较多的,他就比较简单,对因为不要求大家上交,所以我们也不会用这次的这些。

大家自己课后练习的结果去评分,所以如果大家觉得自己对计算结合,已经完全掌握的话,并不会考核的这部分内容,然后如果这堂课刚开始的时候所说,其实它本身就已经是图形学的一部分了,他并不是特别书写的东西。

预科知识,这个我们在公众号上应该是已经推出来了,需要大家掌握线性代数和高等数学啊,没有别的预科知识,好的,那今天的课我们就差不多到这里,然后从下一次课开始,啊有同学说这个想知道的是这个是题号。

具体题目在哪里,大家在网上搜POJ,然后在里面搜题号就可以了,你在任何一个搜索引擎上搜PJ,应该得到的第一个答案,就是这个北大的评测系统,然后如果你有账号就直接登录,没有账号就注册一下。

然后从上下节课开始,就是应该有连续几周都是另一位师兄,给大家上这个呃,关于旋转SVD分解这些相关的内容,然后他的讲授风格可能和我不是很一致啊,他可能会讲得更这个浅显易懂一些。

然后更就是不像我有时候会讲一些,这个我个人认为就是很有意思的东西,但它未必和图形学结合那么紧密,然后呃另外师兄们可能会就是呃,和图形学的这个结合会更更加紧密一些,好那就感谢大家今天的捧场。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

GAMES001-图形学中的数学 - P4:旋转变换 - GAMES-Webinar - BV1MF4m1V7e3

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后跟大家打个招呼啊,这个声音还是有点小嘛,那我说话声音大一点好吧,就是给大家打个招呼,就是我是凝聚另外的另一名,这个叫这个呃助教了,然后我叫阮良旺,然后现在是博士3年级,研究的方向跟新语是一样的。

也是物理模拟,然后呢今天这节课是我开始讲,然后我之后的呃四节课应该都是我,OK那我就把这个我把我自己关了,然后把这个PPT放出来,大家能现在看到PPT吗,可以是吧,OKOKOKOK那好。

那今天就给大家介绍一个旋转方面的知识,然后呢,然后呢就是我们这个课程大纲在这个地方,然后前面两节这个线性代数,基础和计算几何是新语讲的,后面的这个从宣传变化开始的,这个四节课都是我来讲,我连着讲四周。

然后再是新语,后面再去讲,然后后面的分的话,我们在之后再给大家说,呃,那我就直接这个进入正题啊,这个旋转变换呢,大家在之前讲这个线性代数的时候,其实已经接触到了。

就是比如说我们这地方给一个非常简单的例子,就是我们绕X轴旋转30度,那么这个就是这个模型上它有个P点,它的坐标经过这个旋转变换之后呢,就会变到这个PP这个PP和P之间的关系。

就是可以写成一个矩阵乘法的关系,中间这个矩阵呢就是这个旋转矩阵对吧,然后他跟角度的关系,大家可以很直观的看到,就是这个地方有cos sin,这个应该是之前已经介绍过的对吧,这个应该没什么问题。

那么下面给大家看一个现象,就这个现象它非常有意思,他是这个NASA在空间站里拍的,就是有这么一个一个T字形的这个扳手,你把它拿出来,这边转的话啊,它会有一些非常有意思的运动。

那么这个时候你看这些旋转的话,看这个扳手的这个旋转,它跟我们刚才描述那种简单旋转,它就有本质区别,它是这个一个非常复杂的,它是没有定轴的一个旋转,那么我们如何去model这样的旋转。

其实就是我们今天讨论的这个主要的问题,就是如何去表示它,然后去如何去分析这个旋转本身,对我看到同学已经马上知道,这个是这个中间轴定理,说明这个物理基础非常不错,但是我们今天不讲物理。

那我们从这个呃旋转矩阵出发,就是我们说旋转是一个线性变换,那我们看一个一般的旋转,它应该满足一个什么样的要求呢,就是假设我们给定一个任意的,一般的三维的线性变换,这个P撇等于A乘以P。

那么旋转它有个特性,就是你一个物体发生旋转呢,它是一个刚性的变化,那么物体的任意两点之间的距离,是不应该发生改变的,那换算公式就是说,这个P1撇和P1撇之间的距离,在发生旋转之后。

他应该是和这个PQ是一样的,那么我们可以把它写为下面这个关系,就是把这个模长把它变成两个这个向量节点乘,它可以变成下面这样一个式子,这个式子呢它应该是对于任意的这个点,P和点Q都成立的。

就是我在这个模型上随便选两个点,它都是对的,那么很明显,这个式子呢,它是一个关于这个A转置乘以A的一个,然后我把这个激光笔调出,他应该是这个意,你能跑哪去才算呃,他应该是一个A转置乘以A的一个线性方程。

那么这个线性方程呢,它只有这个A转置乘以A,一共是我们算他这个对称矩阵一共六个未知数,但是呢这个细减Q它是无穷多对的,那么这个线性矩阵它成立的话,那么唯一的条件这个A转置A它是一个正,它是一个单位矩阵。

它是个I,那么你对于任意的这个P和Q,上面这个式子成立,那么对于A这个关系来说的话,那也就是说A它是一个正交矩阵,那我们可以干些什么事呢,我们可以干些这样的事情,就是我随机采样一些正交矩阵。

然后把它作用到这个模型上,然后你就会看到我们生成的这些变化呢,其实看起来真的就是各种各样的一个,自由的旋转,但是呢不是所有的选啊,不是所有的正交矩阵,它表示的都是旋转变换,比如说我们这地方举个例子。

就是我只有一个兔子,把它呢沿着这个Y轴这么转,但是呢底下这个兔子,这个兔子呢它在上面是有本质区别的,为什么呢,是下面这个兔子,它无论怎么转,你都不可能转到下面这个兔子这个样子。

大家可以在这个脑子里大概想象一下,就这个兔子它转一圈,它是不会出现下面这种情况的,但是呢下面,但是但是这两个兔子它都是同一个兔子,它们唯一的区别是什么呢,唯一的区别实际上是上面和兔子。

和下面的兔子实际是一个镜像的关系,就是它们之间有一个反射,如果我们线性变换写出来的话,就是对于一个兔子来说,我们可以把它的这个Z轴给它乘一个一,那么这个A矩阵呢它就是一个反射变换。

这个反射变换呢它同样是一个正交矩阵,你可以验证这个A乘以A转置,它是一个单位矩阵,但是呢它是永远无法通过旋转得到这个结果,所以说我们最终可以得出这样一个结论,就是说能够表示旋转的这些矩阵。

它实际上是这个啊特征值为正一的正交矩阵,我们这里必须强调它的特征值是正是正一的,如果是一的话,代表就是有反射的成分,那么所有的特征值为正一的N为正交矩阵,它的集合就称为这个特殊正交群,也就是这个SON。

大家可能在这个呃,在不同的地方看到过这个这个词,就是这个SON代表旋转变换,那么这个地方它的含义其实它就是字面意思,就是这个special osaka group,OSAKA代表这个矩阵是正交矩阵。

special代表它的特征值是正一,然后里面这个N代表的就是它的这个位数,那么所以二维旋转矩阵的集合就是这个S2,三维旋转矩阵的集合就是S3,那么我们说这个旋转矩阵它是一个群,就是成为这个特殊正交群。

那他自然就要满足这个群的一些特征群,它这个地方就是我们其实没必要去啊,非常数学的定义一个群是什么东西,但大家可以有个基本的概念,就是说群里的这些元素,它如果进行这些啊运算的时候。

他得到的这个元素最终还是在这个群里的,所以它对运算是封闭的,那么反应到这个旋转上来说的话,就是说我们有任意两个旋转矩阵,它相同之后呢,得到的结果依然是一个旋转,这个也很容易理解。

就是说两个正交矩阵相乘的话,他一定也出来是一个正交矩阵,并且它的特征值是一样的啊,特征值都是一,然后并且它除了满足这个相乘之后还是旋转,它还满足这个结合律,就是我任意去交换这个结合的顺序。

我可以先R0乘以R1,然后再整体乘以R2,也可以先R0再乘以这个R1和二的整体,所以它是满足这个结合律的,这是旋转的第一条性质,那么旋转的第二性质是说旋转是可逆的,对于任意一个旋转R它代表一个旋转变换。

那么它的逆变换旋转矩阵乘转置,这个是由这个旋转的正交矩阵的性质来保证的,那么如果我有一个左边这个模型,它通过一个R旋转变到右边之后,我就可以通过一个R转置,把它从右边变到左边来,但是呢旋转它有一个三啊。

它有一个比较奇怪的地方,这里注意这里我们强调的是三维旋转,对于二维旋转的话,就是你就在二维二维里面,你先转十度,然后再转20度,和你先转20度再转十度,它结果是一样的,在这三维里面呢。

由于你这个旋转它是还有一个旋转轴的概念,比如说我们这里可以举个例子,一个非常直观的例子对吧,我们这里啊有一个模型对吧,我先把它沿X轴转90度对吧,它会变成这个样子,然后呢我再沿Y轴转90度。

它就会变成这样一个头朝上,然后四只脚朝右的这样一个朝向,那如果对于同样的一个模型,我先沿Y轴先这个沿Y轴转90度,它会先改成一个朝向,然后再转,再沿X轴转90度呢,它就会躺下。

这个时候你会发现他这个四个角是朝左的,所以说三维旋转它是不满足这个交换率的特征,那好那我们现在知道这个旋转,它到底是个什么东西,这对应的是一个特征值为一的正交矩阵,那我们接下来的问题就是说。

我们如何去表示一个三维的一个旋转,这个东西,它对于图形来学来说,是一个非常重要的一个课题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

比如说我们可以举一些例子,假如啊假如我们在这个游戏里面对吧,我们要这个操作鼠标去移动这个镜头,那么你鼠标在这个屏幕上,它的这个移动轨迹是一个二维的东西,就是它只有这个X方向和Y方向这个位移,然后呢。

但是你这个旋转矩阵我刚才说了,他是个矩阵,它是个3×3的东西,那你鼠标的这个操作,它是如何映射到最后的旋转矩阵的变化,也就是说我如何去通过这个鼠标去控制,这个相机的一个朝向,再比如说在这个角色动画里。

我们有一系列的这个我们称之为关键帧动画,什么意思啊,就是说对于一个完整的人体运动的,一个序列来说,它里面会有非常非常多的针,但是在艺术家创作的时候呢,我往往只会指定他中间的几帧关键帧,来表示这个人物。

如果必须他在这个时刻达到这个动作,然后这中间的所有这些动作,其实都是通过差值来插值出来的,那么对于人体决赛而言的话,他的这个呃各个关节之间的这个表示,就是这个各个关节之间差的就是一个旋转变换。

那么我如何去在这个关键帧的关节旋转之中,差值出了这个角色之间的这个中间的这个旋转。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

以及再比如说我们回到这个开头展示的,这个例子,就是这个T字形的扳手在这里转,那么我们在物理上去描述一个物体旋转的时候,那么自然啊去建立它的方程的时候,使用的其实是角速度,也就是这个啊也就是角动量对吧。

我们是用角动量角速度来建立方程的,但是最终呢,我们是要回到这个物体的这个坐标上来,回到它的呃,这个旋转矩阵本身,我才能把这个物体给它渲染出来,假如我们要模拟这样一个东西。

那么这个角速度与刚体旋转之间的关系。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

到底是什么,这个也是值得研究的,然后再比如说呃现在这个神经网络对吧,是一个非常强大的一个工具,那么我们如果再用神经网络去解决一些,这个跟三维旋转有关的这些任务的时候。

比如说我要去估计一个物体的一个未知啊,或者去生成一些角色的动作,那么这个时候呢,我就不可避免的需要网络去输出一些呃,旋转矩阵,那么这个网络它如何去输出这些矩阵,这些问题他们合在一起呢。

其实就是本质上就是我要去研究,如何我在计算机里去表示这个旋转矩阵,表示旋转本身,然后再用这个参数化这个事情,参数化之后的这个旋转去完成我想要的任务,就是那么在具体啊,对我可以这地方稍微停一下。

就是关于这个前面这部分介绍的内容,大家这个有什么问题吗,有问题可以在弹幕里直接打出来,应该还是就大家比较熟悉吧,如果没有的话,可以直接回一个没有,这样我们就不用浪费时间,就是在今天这个直播。

因为我们是直播课嘛,所以就是说大家如果中间有问题的话,就是可以随时的这个在这个弹幕里面反馈出来,OK我看到有人说没有行,没问题,OK那我们在旋转啊,我们在描述我们在讲这个旋转啊,表示之前。

我们先啊需要研究位置,就是旋转它的自由度是多的,因为我们只有知道这个旋转的自由度,个数之后呢,我才能去这个啊对旋转,就我知道我应该用多少个参数去对旋转进行,这个啊进行这个描述对吧,那么对于二维情况来说。

就是左边这个图它非常简单,就是二维旋转的话,我只需要用一个角度就可以描述描述对吧,正的就是它是一个,比如说我这个图里面画的正的话,它就是一个顺时针旋转,E的话,负C大小于零的话,它就是一个逆时针旋转。

然后C2的大小代表他这个啊旋转的这个啊,这个角度大小对吧,那三维情况呢,三维情况,如果我们根据这个旋转本身的定义来说的话,那就对于一个旋转来说,我首先定义一个旋转轴对吧,我绕哪个轴进行旋转。

这个旋转轴U它是一个属于一个三维向量,但是呢我们会给这个三维向量加一个约束,就这个U它的模长应该是一对吧,因为呢如果我因为这个U本身,我它只有它的方向有用,它的大小其实是没有用的。

真正描述这个旋转的大小是这个西塔对吧,它是还有额外的一个参数,所以总共来说的话,三维旋转它的自由度应该是3-1,然后再加上C它的一,所以是三,那么我们可以换一个角度去理解这个问题。

就是对于二维旋转来说的话,我们都说旋转是旋转矩阵对吧,然后呢对于二维旋转也好,三维旋转也好,它都是一个特征值为一的一个正交矩阵,那如果比如说我们以二维为例,那么二维的话,它满足这个条件。

就是这个R转置乘以R等于一个identity matrix,等于一个单位矩阵,那给他写开的话,它对应的其实只有三个方程,为什么只有三个呢,因为这个R转至R,它本身一定是一个对称的矩阵。

那么它啊这个不相干的这个自由度的个数,那只有它的这个对角元素两个,再加上一个啊,这个啊非得教育对吧,所以是2+1=3,那写出来呢就对应的是这个这个方,右边展示的这个方程,就是你对角元素上应该是一。

然后非调到元素上应该是零,所以说RT乘以R等于I,它其实对应的是三个方程,那R本身作为一个22的一个矩阵,那么它是一个四个自由度,所以它剩下的自由度呢就是34-3=1,对吧,对于三维形状而言的话。

这个故事是类似的,3号选项的话,R是一个33的矩阵对吧,那RT乘以R等于I的话,对应的是几个方程,还是一样对吧,对角线三个方程,然后呢剩下六个,由于你是对称矩阵,所以我只有三个是独立的。

所以是3+3=6,所以也是啊,所以所以是六个六个方程,那么一样的,我们可以算93×3,等于九九个自由度,减去六六个约束,那剩下的就是三个自由度,所以跟刚才计算的结果一样,二维旋转的话它是一个自由度。

三维旋转的话它是三个自由度,那么呃介绍完自由度的时候,我们可以引入一个稍微抽象一点的概念,就是个流行的概念啊,我们今天肯定是不会在数学上给大家严格定义,流行是什么东西,我引入流行。

只是为了大家一个直观上的一个想象,就是说想象我们研究的这个旋转,它在空间中到底是一个怎样的分布,那么流行是一个什么东西呢,我们可以举一些简单的例子啊,比如说左边这个这不画一个圆对吧。

因为这个圆我们称之为它,就是一个二维空间中的一维流形,首先它是为什么是二维空间呢,因为我是在这个平面上画的对吧,那为什么它是一维流形,因为对于这个圆来说,不考虑它的理念,我只考虑这个圆的边界。

它其实在局部的地方,处处它都是近似于一个一个线段对吧,那么一个线段的话,它就是一个一维的东西,所以这个圆它就可以认为是一个,二维空间中的一位六级,然后下面这个例子呢,这个是一个什么东西。

这是一个克莱因瓶对吧,克莱因瓶我称之为是三维空间中的二维流形,那首先还是一样,为什么它是三维空间呢,因为我这个东西是一个三维的模型对吧,我是把它画在三维空间里的,那为什么说它是二维流行,就是还是一样。

你去看这个特莱因瓶的每个局部,你假设你离他非常近的话,你在局部来看的话,它其实还是一个平面,对吧,它本质上不是一个三维有实体的东西,它本质上还是一个平面这种曲面组合成的东西。

所以它是一个三维空间中的二维游戏,所以流行是什么东西,大家可以用这个这两个例子,获得一个直观的一个一个理解,它其实就是说的就是说它局部来看的话,它其实是一个低维的东西,但是呢你没有办法把它展开展。

形成一个啊一个一维的东西,比如说这个圆,他没有办法把它展开成我就是一维的一条线,它是不行的,因为它是一个首尾相接的圆嘛,它只有在二维空间里面,我才把它画了出来,所以这就是流行。

那么为什么介绍流行这个概念呢,其实是跟刚才介绍这个自由度的概念,相联系起来,那么对于一个任意的一个啊,所有的旋转我可以这样想象啊,比如说二维情况下,每一个旋转它都是一个2×2的矩阵,对不对。

那假设我整个空间都是一个整个空间,就是一个四维的空间,假空间就是四维空间,空间中的每一个点代表其实是一个矩阵,比如说我在这个矩阵,在这空间里面随机踩一个点,那么这个点拿出来。

它对应的就是一个2×2的矩阵,那个2×2矩阵表示,就是一个任意的一个线性变换,那么旋转是什么,所有的旋转在这个空间中它会是一个一维流行,为什么是一维呢,就是我们已经说过了,这个旋转二维空间中的旋转。

它的自由度是一代表,只有啊,这我只能动一个啊,一个自由度去改变不同的旋转,那对于二维空间中,这个自由度是什么,就是它的角度对吧,所以所有的旋转,在这个空间中会组合成一条一条曲线,这个曲线长什么样子。

我们其实不用管,我暂时不用管它,我们就认为它是一条曲线,然后我在这个曲线上采样的话,任意采样一个点,它都是一个旋转变换,然后并且呢在这个点附近,就是曲线上相邻的点接近的点,它在空间中。

它最终表示这个旋转变换它也是接近的,就它这个东西是一个连续的,所以这是一个二维的一个旋转的它的一个途径,那么对于三维旋转这个情景就会复杂一些对吧,首先三维的话大家知道三维旋转是什么,是3×3的矩阵对吧。

所以是一个久违的一个空间,然后呢三维旋转的自由度是多大呢,是三对吧,所以就是一个对应的三维流行,大家应该是,就是我觉得应该是没有同学能够想象出来,一个九维空间中的一个三维流行。

它对应的会是一个什么样的东西对吧,就我们能想到的可能还是只有这个一维流行,二维流行,最多三维流行,但是九维空间中的三维逻辑可能就有点难了,那么为什么去哦对呃,然后呢引入这个流行这个概念之后呢。

我们对于这个呃旋转,它其实有一个啊更精确的一个描述,就是说旋转首先它是群对吧,我们刚才已经说了,它是一个叫这个啊特殊正交群的一个东西,那同时呢我们这里又介绍说旋转,它所有的旋转是组合成一个流行的。

那么如果一个东西它既是群,然后他同时又是一个流行的话,我们就称之为这个东西叫群,大家可能在其他的地方,比如说一些机器人的一些教材里面看到的,就是用李群,李代数这些东西去描述去推导这个旋转的概念。

它其实就是从呃从这里来,就是前线上去理解的话,是从这里来的,OK这里有问题吗,大家,啊行看起来没有问题,那我就继续对我们引入这个旋转的这个概,我们引入流行的这个概念是为什么呢。

是我们其实可以在这个比如流行概念之后呢,对很多东西有一些直观上的理解,比如说我们刚才提到了,说在这个关键帧动画里面会有旋转的差值对吧,那么旋转差值这个事情,为什么是一个是一个难的东西呢。

因为如果我比如说我直接啊用旋转矩阵,用3×3的矩阵去表示旋转的话,我直接在这里面做线性插值,它会出问题,问题是什么,是你中间比如说我直接做线性插值,插这个插出来一个RT。

这个RT它其实不一定在这个流行上的,假设我的这个流行是一个,比如说类似一个甜甜圈的一个东西,我现在不管它这个形状是什么,反正他一定是个曲面,那么我随便选两个点去做线性差值的话,那么中间插出来这个点。

它就不一定在这个流行上,那于是呢,这个点它代表的就不一定是个旋转变换对吧,那所以你直接做线性插值的话,叉出来一定会是奇怪的东西,比如这个地方上面这条线,你画的就是它可能会先变小,然后变拉伸。

然后再慢慢的回到这个右边的这个R1的状态,那我真正要做的是什么,我要做的是在这个流行里面,找到一条合理的路径,然后在这个路径上选一个点进行插值对吧,我最终要找的应该是一个RT这样的一个点,它在流行上。

然后同时呢,它在R0和R1连接的这个曲线上对吧,并且呢大家可以想象出,这个曲线应该是应该是最短,越短越好,因为如果短的话,代表我这两个之间的这个走的这个路径是啊,走这个他们之间这个差别也是最小的。

那自然是这个时候我插值过去,它应该是一个啊最合理的一个动词,所以这个是旋转差值,如果我用流行视角去看这个旋转差值的话,它会有这样一个结,它同时它有助于我们去了解这个角速度的概念。

在比如说呃在正常的这个O极地的空间里面,我们有一条轨迹,这个点在这条轨迹上运动,那么它的这个每个点的速度,我要求他的话,我只需要把它说的这个位移X拿出来,这个时间求个导数,它对应的就是速度对吧。

位移它是一个三维的向量,速度也是一个三维的向量,但是对于旋转来说的话,旋转它是一个3×3的矩阵,我如果对于这个3×3的矩阵直接求导的话,他求出来也会是一个3×3的一个东西吧。

但是角速度呢大家如果这个啊有了解的话,角速度应该是一个三维的一个矢量对吧,它不是一个3×3的矩阵,所以你欧米伽和欧米伽角速度和这个矩阵求导,它们之间肯定不是一个直接相等的关系,但是呢什么东西是三维的呢。

我们刚才说了,这个旋转它组成的这个流行是三维的,但于是我在这个任意这个流行上一点,选择它的这个切空间,这个切空间实际上是三维的一个东西,那么角速度与旋转之间到底是什么关系。

这个角度其实就是这个切空间上的一个矢量,对吧,它本身是三维的,但是这个旋转它是一个manifold,它是在九维里面,再比如说我们今天要讲这个旋转的表示问题,那么其实对应一个什么样的问题。

对应一个流行的参数化问题,就是我有一个任意的一个流行,比如长得奇奇怪怪的,我要把它这个比如说我给他贴上贴图对吧,如果大家这个学习这个games101的话,我给他贴上贴图。

那我自然知道每个点的UV坐标对吧,这个UV坐标它其实是一个二维的东西,比如说底下画这样,它其实是个二维的东西,但整个模型呢它是个三维的东西,所以我的任务是要把这个三维的模型给它。

映射到这个二维空间里面去,其实就是给这个模型做参数化对吧,这个就是啊我说对流行进行一个参数化的步骤,它对于旋转而言的话,旋转本身是个3×3的一个矩阵,然后我们要去为他这个寻找不同的,这个表达的方法。

那么我们一样的也是对它进行这个啊,找他的这个参数化的问题,就是最终我这个问题,它是一个对应一个自由度为三的东西,而不是一个9×3乘三的一个矩阵,那么所以我们今天介绍,比如像各种各样的方法。

这个欧拉角也好,轴角也好,虽然数也好,各种各样的方法,它本质上其实就是在以不同的方法,对旋转这个流行进行参数化的过程,OK这个就是其实今天想给大家介绍的,这个重点内容的一个呃。

一个整体的一个一个一个直观上的理解,OK吧,那么大家如果没有什么问题的话,那我们就直接开始进入这个比较细节的东西,那首先我们来看旋转,旋转的第一种表示这个欧拉角表示呃,我们刚才说了。

说这个旋转它是一个呃三呃,三个自由度的东西对吧,那么自然可以想到我有办法,比如说我把这个旋转分解分解到各个轴上,然后你绕各个轴的这个旋转的角度,来表达整个的一个旋转,那么这个表示方法就是这个欧拉角。

比如说这个地方大家可以看这个呃,动画和左边的这个图,就是我有这样一个一个球,然后我要对它进行旋转,我可以分解成三步,哪三步呢,第一步我先沿这个Z轴把它转阿尔法角,然后呢在转完之后,我再沿这个X轴。

就是左边这个图里面这条绿色的轴,把它转一个贝塔角,那这个时候Z轴它就会有这样一个偏移对吧,然后转完之后呢,我最后再沿这个Z轴去给他转一个伽马角度,完成三次旋转,那么这三次旋转呢对应就会有三个参变量。

只是一个阿尔法和伽马和贝塔,那对应就是一个自由度为三的东西,那么理论上这个东西它就应该表示,可以表示我的一个任意一个旋转,那好在推导这个欧拉角之前,我们先再回啊,再再再再回顾一个东西就回顾啊。

就是在讲一个东西,就是这个旋转与坐标变换的关系,我们刚才所有介绍的东西,讲这个旋转矩阵的时候,我们都是固定在这个,我们称之为世界坐标系下的,去考虑的就是我有一个固定不动的一个坐标系。

然后我去看你们那个模型,它里面的点会怎么动,那比如说假设我旋转前在这个模型上有个点P,那么旋转之后呢,它在世界坐标系下,在这个不动坐标系下会变到这个PW1撇,这个W就是word视觉坐标系。

那同时我还有另外一种观测方法,就是我有个最高系,固定在这个这个模型上没有动,这是个蓝色的坐标系,那么对于这个模型上任意一点,由于我整个旋转变换是一个刚性的变化,那么这个点它相对于这个蓝色坐标系的。

这个坐标是在旋转前后是不应该发生变化的,所以说如果我有这样一个局部坐标系的话,那么这个它的坐标PL1撇,他应该是在整个旋转过程中不会发生变化,还是之前的还是钱的坐标P对吧。

那好那如果我们只在这个世界坐标系下考虑,我们有下面这样一个旋转关系,就这个其余word1撇等于R乘以P,这个R就是我们之前一直用的这个旋转矩阵,然后由于这个P呢,它其实是等于这个PL1撇的对吧。

我们也可以把它理解成下面这个形式,就是p word1撇等于R乘以PL1撇,那于是呢这个棋这个时候这个时候你看等式,左右两边它其实表述的都是旋转之后的状态,他们唯一区别的是什么。

是对于同一个点P我选择了不同的坐标系,表示左边的这个p word1撇,就是在世界坐标系下的,表示右边的这个PL1撇,p local1撇,它是在局部坐标系下的,表示这两个表述表述的是根本上是同一点。

但是呢中间会插一个旋转矩阵,所以下面这个式子其实代表的就是一个,对于同一个点,如果我换一个呃坐标系的话,那么它的这个坐标变换应该是什么,这个东西就是大家如果在,比如说在做做渲染的时候就会用到。

就是我有一个啊,我比如我对任意这个模型上的任意一个三角形,我要知道它旋转之后,在这个世界的标签下,它会啊在什么位置,那我就需要乘一个旋转矩阵O,那好有了这个理解之后呢。

我们就可以去推导这个欧拉角本身的公式了,对吧,我们刚才介绍这个旋转的顺序,先沿Z轴转阿尔法角,然后再沿这个X轴转啊,转贝塔角,然后再引进轴转伽马角,阿尔法贝塔伽马三个角度。

那么可以推推他这个坐标转换关系,那么首先呢,这个XW就是这个模型上固定的这一点,他在睡坐标系的位置,他应该是等于R1乘以XL11撇啊,XL1XL1代表的是他在这个他的这个呃,其实这个图中。

这个蓝色旋转转完之后的那个坐标系,就是我第一次旋转转完之后的坐标系,这两个坐标系之间差的只有这个,第一个阿尔法角表示这个旋转R1,那么他们两个之间的坐标变化关系,就是这样一个关系对吧。

那这个关系我可以进一步继续继续下去,就这个XL1他是在这个蓝色装完之后,这个坐标系里,我还可以把它进一步啊,进一步变到右边的这个坐标系,变到下一步,这个坐标系也就是这个绿色转完。

这个贝塔角转完之后的这个坐标系里,它就会多出一个R2对吧,然后多出来一个XL2,然后呢最后一步一样的,它有个伽马旋转,伽马旋转之后呢,我一样的可以把它拆开,拆到最后。

那这个时候呢这个XL3其实就是在固体的,在这个啊旋转模型上,绑定的这个红色坐标系对吧,它本身的局部坐标系下的坐标,XL3XW是说这个点在世界坐标系下的坐标,他们之间的这个差的就是这个R12。

R3这样一个矩阵对吧,那么这样一个矩阵,就是我欧拉角代表的这个旋转矩阵,我把这个矩阵拿出来,把它写开,就可以写成这个Z阿尔法贝塔伽马,呃关于这个大家有问题吗,讲一下左乘和右乘R呃,右乘R。

我们这地方选的就是这些X都是一个列向量,所以如果你要乘的话,一般都是左边乘,为什么是插在中间,是什么东西,插在中间,RR为什么插在中间嗯,我这R都是在左边啊,你说为什么是在这个每次是在中间乘的。

而不是在这个R1的左边乘,其实我是这个他推导这个关系是,这个XW等于R1乘以XL1嘛,然后这个SL1它拆开的时候,它拆开成了R2乘以XL2,嗯我理解这个问题,对对对,就是我在推这个东西的时候。

他这个他这个坐标的关系,这个XL1我这里推的是坐标的关系啊,XL1这个坐标它会变成右边这个东西,然后一样这个地方XL2这个东西它会拆开,变成R3乘以XL3,所以你一路推不下来的话,它是一个又称关系。

当然这个呃关于左乘右乘啊,再一个我们待会会有一个概念,会跟这个东西有关好吧,但这个推导的话应该是没有什么问题,所以旋转矩阵我们拿到了,然后每一个旋转矩阵你看它的一个局部的话,这个Z阿尔法。

它其实就是一个,就是单纯的一个绕Z轴的一个旋转矩阵,所以他这个Z这个轴是没有变的,所以这是001001,那它唯一的是XY,会有一个2×2的一个旋转矩阵对吧,X贝塔是一样的,它的X轴是没动的。

然后Y和Z会有一个转矩阵,Z的话一样对,所以这就是欧拉角的三个三个分量,然后你就可以直接把这三个矩阵乘起来,你先建立每一个矩阵,三个乘起来,得到最终的阵,OK这就是这种情况下,欧拉角。

为什么说他是这种情况下的欧拉角,因为欧拉角它实际上有非常多的这个选择方法,对吧,我们只说了这个旋转,它本身是三个自由度,然后呢,我们没有说,你非得就是按照我们刚才这个顺序来,就是我非得先自己转。

然后X转,然后再自己转对吧,你可以自由选择,比如说我先X转,然后再自己转,再X转,或者什么先X转再绕绕X转,再绕Y转,再绕Z转对吧,你想一想这几个字母这么多组合对吧,它有很多很多种组合组合方式。

然后只要不是比如说你沿X轴转完之后,我接着再沿X轴转,那这样的话你两次就重复了吗,这种情况除外,其他的所有的组合都是可以符合要求的对吧,都是可以符合要求,就表示所有的旋转。

但是呢注意的就是每一个啊这个顺序,他最后得到这个旋转矩阵都是不一样的,它的形式都是不一样的,这个是为什么,就是刚才提到说旋转群,它是不满足这个交换率的,就你先沿X轴转,再沿Z轴转和先沿Z轴转。

再沿X轴转,它的结果是完全不一样的,所以说每一个这个啊选择的方式,它都会对应有这个不同的结果,那么在如果大家可以上这个维基百科,或者是在其他资料上的话,他就会把这个呃不同的组合方式。

它对应这个旋转矩阵给大家列出来,可以方便大家查表,然后去用,那么除了这个不同轴的这个组合的顺序之外呃,欧拉角还会有一个比较烦人的东西,就是这个内旋和外旋的区别,什么叫内旋和外旋呢。

就是刚才给大家介绍这种旋转方式,它对应的是内旋,就是说我每次旋转都是绕过之前旋转之后的,那个自爆系转的对吧,所以大家刚回去看一下刚才这个视频,我都是先比如我先转完了,转到红色坐标系之后。

我再沿红色这个Z轴去转啊,再沿红色的X轴去转对吧,然后转完之后呢,最后一次我再沿Z轴转的时候,我也不是绕这个蓝色的Z轴转,是绕这个红色自由转,这个东西就称为内旋,那么与之对应的就是外旋,外旋。

说的意思就是说,每一次这个旋转的这个沿的轴,都是我最外面固定的这个世界多导系的轴,我先沿地轴转,我就是沿这个世界多导系的Z轴转,这个时候他的XY角度就会发生一些偏移对吧,然后我再转的时候呢。

我不是沿我转完之后走到西转,而是沿沿着它本身的这个啊,沿着本身的这个世界坐标系的Y轴转,然后Z轴X轴一样,我还是沿着本身的这个视觉做标系的X轴去转,那么这个东西叫外旋,内旋和外旋,它们之间是有联系的。

大家可以去想象一下他的联系是什么,对有同学提到,就是说它跟这个三个矩阵的旋转的这个,相同的顺序有关,OK这个是是对的,它确实是有关的,那么这个东西我们把这个东西留成一个作业,大家可以回去去尝试推一推。

那他用了数学,就是我们刚才介绍这个坐标变换,然后还有这些东西,你可以跟着就是跟我这个方法,就欧拉推欧拉角这个公式这个方法一样,去尝试一下,再看一看这个内旋和外旋,它这个旋转矩阵到底对应的是一个。

什么样的关系,对吧,那总的来说就是欧拉角这个东西,它虽然很直观对吧,我就是绕三个轴转一下,但是呢由于它有非常多的这个顺序的选择,然后以及这个内旋外旋的规范,所以在用的时候一定要谨慎,就是不同的这个软件。

它的里面的这个呃这个顺序规定,可能就完全不一样对吧,那么我们回到我们刚才提出的一个问题,就比如说在一个游戏里面,我们需要去移动这个鼠标,去纵使这个相机的转动,那这个时候呢有一个通用的一个。

一个大大的一个规范吧,这个规范从外来从这个啊飞机航空业那边来,就是他们对于这个三个角,它其实是有一些这个呃这个具体含义的,比如说右边这个图可以想象,对于一个飞机而言,绕着这个机体本身的这个转动。

它叫row axis,那它就是一个平稳的一个角度,它不改变这个飞机的航向,而绕垂直于这个飞机的这个这个方向,这个yangles access就是代表这个机翼,这个飞机的它往里飞一个航向角度。

然后呢在水平另外一个轴上,这个PHX上它代表的是这个飞机的俯仰,代表你的飞机往上飞还是往下飞对吧,这个大家都能想象,那么对于这个我们这个游戏里面这个相机来说,你可以把它想象成一个飞机对吧。

无非就是控制这个飞机机头朝朝哪个地方,那么其实你需要调节的,其实就是它的这个航向角和俯仰角,所以大家如果去看一些这个一些代码的话,你就会发现它里面关于这两个角度的叫法,其实一个就叫PCH,一个叫要。

但是一般来说我们不需要这个row x,你也不希望这个相机对吧,他在这边翻转的人可能会比较晕。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对我们刚才提到说不同的软件,它其实规范是不一样的,比如我们这地方给大家看一下,这个blender的界面,bender里面它就会有非常多的不同的,这个旋转的这个方式,这个啊XYZ啊。

然后XZYYXZ啊这些之类的东西对吧,这个就大家可以去啊,如果blender也是开源的,免费的,可以去玩一玩,然后看看他这个不同的这个啊角度的这个选择,大家这个就是blender这个做的比较好。

就是说如果你去改变这个他的这一个选择的话,它会自动帮你把这个角度换算过来,就是我这个设置是X60,然后Y20G0,然后你换一个,比如说XYZ换到什么什么YXZ的话,他这三个角度值是会改变的。

它这个物体的朝向是不会不会改变。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

但这三个角度是不一样的,那好那欧拉角它的优势大家也看到,就是它非常直观对吧,但它有个非常致命的问题,称之为这个block就是万向锁的问题,这个万向锁代表什么含义呢,就是我们看这个右下角的这个情况。

这个情况是说当我的这个航向角就是个紫色的,这个环和这个俯仰俯仰轴就是个绿色这个环,他们俩平行的时候,这个时候你去转这个蓝色的环,以及转外面这个紫色的环,对于这个飞机来说,它这个转动的方式都是一样的对吧。

它都是对应这个飞机的一个横滚的一个动作,对吧,那比如说我们单独把这个点拿出来,你就会发现这个飞机做不了沿一个轴的旋转,是哪个轴呢,所以这个飞机的它的航向还是改变不了的,就你不管怎么转。

这个飞机只能冲上它,在这个这个configuration下,在这个配置下,它是不能让这个飞机去改变它的形象,所以说这个现象就称之为一个block,称之为万向锁的现象,他表示就是说虽然我的这个呃。

我是一个三个自由,三个参数去表达一个三维的一个呃,三维的一个流行,但是呢这个地方它是一个对应的一个基点,它是一个对它是一个基点,就是说我明明是有三个参数,但这三个参数在这个点上只能控制两个方向。

还有一个方向是被lock住的,那这个东西就非常的不好对吧,就是如果我要做一些,比如说我就是希望在这个点附近,它是连续的,然后需要可能一些别的操作的话,那这个时候这个问题就比较严重,所以啊万向锁是欧拉角。

一个非常严重的一个问题,那我们接下来看另外一个表示,就是这个轴角表示,轴角表示其实它是一个旋转的一个定义,表示我有一个就是我给定一个旋转轴,给定一个转动的C大脚,那它就可以定义一个旋转对吧。

刚才也给大家算过了,它实际上虽然是这个两个一个向量,一个标量,但它实际对应的自由度是三个,那么我其实还可以把它换一个写法,写成这个旋转向量的一个形式,怎么写呢,就是我把这个C塔角横到这个旋转轴上。

乘到优胜,那这个时候呢他就是一个三维向量对吧,那这个三维向量的,它的模长表示的就是旋转角度,它的方向对应的就是旋转轴对吧,所以我就可以用一个向量,一个三维的向量表示一个完整的旋转。

那我们接下来需要推什么呢,我们需要推一个东西,就是这个主角表示加我给你一个U和西塔,那对应的这个旋转矩阵到底是什么,怎么来推呢,就需要到这个呃,这个下节课睡到这个计算几何的一些东西对吧。

他推的一个核心思路是什么,是我把这个旋转之后的这个向量,VIVT这个向量把它分解到两个方向上,第一个方向是跟这个旋转轴平行的方向V平行,第二是这个垂直这个旋转轴的方向,这个平面上,两个方向上。

然后呢我去分别看这两个方向,它旋转经过旋转之后会怎么动,那么在这个平行分量上,这个V平行它的它就很自然他就不会动对吧,核心的就是我把这个垂直方向的分量,从原来这个B垂直变到了现在这个方向,那我就可以啊。

看下左边这个公式的形式,就是我一个旋转向量,它等于一个平行分量,加上一个旋转之后的平行分量啊,旋转之后的这个垂直分量,然后那个平行分量呢它是不会动的,你可以直接写开,就把它啊V投影到这个U上。

然后再乘以这个U的方向,然后后面这个V垂直的旋转之后的向量呢,它可以写成后面这个形式,cos z大乘以V垂直,加上sin c塔乘以U叉乘B垂直,这个对应的其实是一个二维的一个旋转公式,对吧对吧。

一个cos西塔,一个三西塔,然后呢这个V垂直就是我原本的这个方向,然后U叉乘V垂直,U在U是旋转轴对吧,VU叉重力垂直对应就是一个W的方向,就是跟这两个东西都垂直的方向。

然后呢我可以把这个东西给他带进去,然后呢然后在这个VV垂直,它又可以写成V减去V平行对吧,然后这个三叉乘我也可以写成这个点乘,减去本身的一个形式对吧,这是三叉程度的展开式,好把这一堆公式都搞到一起。

然后就可以得到最后这个旋转一个表达,在旋转公式的表达就是我最后这个旋转之后,这个向量它应该等于什么什么什么什么,还有一个很长的式子,然后为了把这个故事简化一下,让大家看得清楚一点,我们可以干点什么事呢。

我可以把这个右边这个故事里面的V1提出来,就是看第一个公式里面把V提出来,那么第一项就是个identity matrix,然后后面这一项U叉乘U叉乘V这个东西,我可以用这个叉乘的矩阵表达。

就是把U外面加一个方括号的形式,把它写成矩阵形式,那我插两次就把这个矩阵平方对吧,然后后面一个3C大乘以U叉乘V那样的,就是把U写成叉乘矩阵的形式,把它写成这个形式,然后拿这个矩阵去乘以这个V。

对应的就是一个叉乘,所以最后我就可以把这个旋转矩阵给它,单独拿出来,它写成这个样子,它是一个关于U和CA的一个方程,这个公式呢也称之为罗德里格旋转公式,OK吧,具体推到我这里。

就只是给大家简单介绍一个那个逻辑,然后大家想推的话,可以回自己在首推一下,关于这个公式,大家有问题吗,这个公式还挺重要的,就关于这个公式本身大家能看懂吧,我正好喝口水,行没有人说,那我就默认大家都会了。

OK那么有了这个旋转矩阵的表达之后,我们只解决一个方向对吧,就是我有了U和C大之后,我怎么去得到一个旋转矩阵R,那么反过来还有一个方向,就是这个我有一个旋转指针R,我怎么得到它这个旋转轴U和时间角度。

西塔对吧,那这个东西怎么做呢,我们可以从这个旋转公式本身推一些性质出来,比如说我去考虑这个旋转矩阵呢,它的trace,可以推一推identity matrix,一个单位矩阵,它的trace就是三对吧。

然后U啊这个叉乘矩阵的平方,它的trace应该是多少,这个东西,啊这个也可以,大家就把这个U叉乘的这个公式,给他带进去对吧,然后注意到这个U的它的模长是一,所以你可以自然得到它这个case是多少。

应该是二对吧,然后把它带进去,然后最后这个U本身插上矩阵,它的这个trace它是零,OK3个东西带进去之后,我们可以得到这个R,它的trace就是12倍的cos theta呃,这个东西它非常好。

是因为这个东西它跟U没有关系了,所以我就可以单独把这个东西拿出来,然后也可以定义这个呃theta和全是矩阵R关系,那就是这个关系对吧,C它等于trace r减去12。

然后再取个r cos自然就是这个旋转角C塔,那有了心态之后,我们要算这个旋转轴U怎么算呢,我们先推一个东西,就是推这个啊叉乘矩阵的平方,它的具体含义是什么,它的具体形式是什么,我们可以怎么推呢。

我们可以把这个叉乘矩阵U的平方,给它乘以一个任意的向量V,这个V是一个任意的向量,然后把它展开就是U叉乘叉乘B,然后利用这个二叉三叉乘的这个形式给它展开,展开完之后把它写成矩阵形式。

就可以到后面这个式子,由于我的V1是一个任意选择的一个向量,所以我把两边的这个V是可以直接约掉的,那可以得到这个啊叉乘矩阵的平方,它实际上等于U乘以U转置减去identity,这么一个形式对吧。

你会发现这个啊U叉乘矩阵的平方,它其实是一个对称矩阵,虽然U本身是一个U叉乘矩阵,本身是一个反对称矩阵,但是它平方之后会是一个对称矩阵,那我观察这个式子就会发现I是一个对称矩阵,这一项也是一个对称矩阵。

只有最后一项是一个非对称矩阵,是一个反对称矩阵对吧,那我可以干点什么事,我可以把R减去一个R转至,那么前面两项由于它是对称矩阵,就会直接消掉,只剩下最后一项一个反对称项。

那就得到两倍的sin西塔乘以这个啊,U的查成矩阵,那么CA我们之前已经推出来过了,才是这个形式对吧,那我就可以把CR带进去,然后利用这个形式导出来,这个U最后是长成这个样子,所以有了这个旋转矩阵之后。

我也可以推出来这个旋转轴和旋转角度是什么,这样两个方向都能推了,那同时,旋转矩阵还有一个非常神奇的一个形式啊,就是这个指数形式,就是这个啊我们刚刚说这个R和U和C的关系。

它其实是罗德里格公式给出来的关系,对吧,是这个关系,那么其实呢我可以把它写成这样一个指数形式,就是这个啊theta u叉乘矩阵,然后把它一个矩阵,一个3×3的矩阵,把它放到指数上。

然后我们可以把这个C大乘进去,利用我们最开始定义的这个旋转向量的形式,把它写成后面这个式子,这个式子非常的干净,就是说我最终这个啊旋转向量和这个啊,旋转矩阵R他们之间的关系,就是一个指数的关系。

那么这个指数是哪里来的呢,对于一个啊我们可以这地方推一下,就是对于一个任意一个3×3的矩阵,如果我要算它的指数的话,其实我利用的是这个指数的展开形式,就是把它展开成这个泰勒级数,展开成这个一加上。

就是E的X方等于一加X加上二阶乘分之一,乘以X的平方,加上三阶乘分之1X3次方,一直往下加下去对吧,然后里面的这每一项我都可以去计算,比如说我们刚才算这个U的啊,这个参数矩阵的平方等于U乘以U转置。

减去I对吧,然后呢我可以把它再乘一个U,然后就会你就会发现什么,把这个U乘到左边来,U叉乘矩阵乘以U它应该是零对吧,因为U叉乘U本身应该是零,实际上只会剩下一个负U的插入矩阵,那一样。

你可以得到这个U插入矩阵的四次方,五次方,五次方之后它就会有一个回归,就是这个U叉乘矩阵本身的五次方,它是等于U叉乘矩阵本身的,所以这个式子它是不需要无限的推下去,它是一个本身是一个呃。

1234循环的一个东西,那我就可以把这个循环利用的,把这个利用这个循环放到这个展开式里面来,对吧,我可以把所有的这个呃U差矩阵这一项,然后以及这个U差矩阵的平方平方这一项两项,把它前面的系数合到一起。

它就会变成这个样子,好这个系数大家应该就比较眼熟了对吧,西塔减去三阶乘分之一下三次方,加上五阶乘分之1+5次方对吧,后面一样的,前面一个系数对应的是sin theta的展开。

后面一个系数对应的是一减去cos西塔展开对吧,所以我又把它从一个级数变成一个紧的形式,变成一个compact的形式,那这个形式正好就是罗德里德的旋转模式,所以说这个指数形式也是一种从这个C塔角啊。

C塔旋转向量到这个旋转矩阵的一个,正确的表达方式,那么这么巧的东西,它当然不是一个巧合,纯粹的巧合,它其实反映的是一个更本质的东西,就是从李代数到李群的一个指数映射关系,这个可能啊。

我们肯定今天是不会讲到这个东西的,大家如果有兴趣的话,可以去就可以去研究一下这个东西,它啊非常有意思,就是他描述是,其他是你从切空间上拿一个向量出来,然后你去往前走。

你走的时候对应的其实是应该是在球面上,在那个曲面上走,在流行上走,导致结果是你会啊,积分积出来一个指数模式OK了,但这个地方我们今天就不涉及了,我们只是把它拿出来用就拿出来,甚至不是用。

只是拿出来给大家看一下,就是说有这样一个东西存在,OK有了指数啊,有了主角表示之后呢,我们可以研究一下一个问题,就是主角表啊,就是我怎么去插值一个旋转对吧,怎么差值呢,我们就可以利用这个。

我们刚才推出的这个主角表示,与旋转矩阵的关系,我们可以分成这么几步进行,第一步我首先求一个啊,求一个这个呃,比如说初始状态是R0T等于零的时候是R0,T等于一的时候才是R1,我要插中间T的状态。

那我们可以算一个相对旋转矩阵,德尔塔R它是等于R1乘以R0转至R0转置,其实也就是R0的逆对吧,那么这个DR反映的就是从R0到R1,的一个相对旋转,然后可以把这个相对旋转通过主角表示。

转化成一个转动角度,西塔和相对旋转的轴加一下U,那我接下来要擦除的时候呢,我就可以固定这个旋转轴,固定旋转轴不动,然后只是插值它的旋转角度,CA武器得到一个C塔,T等于T乘以这个相对旋转小度德尔塔C塔。

然后用这个C塔T和这个中间相对的旋转轴,两个东西,再用一次这个罗德里的公式,得到这个中间的旋转的德尔塔RT,然后再把这个德尔塔RT乘到R0之上,就可以得到最终的旋转绝RT了,OK了。

这就是如果你要主角表示,去做这个旋转的差值的话,它也可以插插出来,就是这样一个一个形式,你可以看到它中间插值的都是对的,但是呢有一个事情是错的,就是我们刚才不是介绍这个旋转向量吗。

这个旋转向量如果你直接把它做线性插值的话,查出来的结果是不对的,比如说这个地方展示了一个例子,就是左边西塔零代表一个旋转对吧,代表是绕这个啊,100这个轴转了3/2的3/2派。

3/2派这个角度末状态是绕这个啊,Y这个轴转32派的角度对吧,两个旋转向量,如果我直接去拿这个旋转向量做线性插值的话,它叉出来会是一个非常诡异的结果,就是它确实是啊中间状态是旋转。

但是呢它不是走的最短路径对吧,它会看起来就是绕弯弯绕,绕的绕了很多圈之后才回到这个右边这个状态,但是如果你直接去算它的这个相对旋转,然后再用相对旋转的相对角度做线性插值的话,那么它插出来的话。

直接一定是就是直接就是对的,就是因为我是绕一个轴的,直接做了一个旋转,所以就是这个注意的点,就是说大家如果用旋转向量去做插值的话,不能使用旋转向量直接插值,而且是用相对旋转,那好介绍完这个旋转向量之后。

我们最后再介绍另外一种方法,就这个四元数,四点数其实是一个比较重要的概念,就是大家如果在呃用一些数据库的时候,里面的旋转向量大,旋转矩阵大概率是四点数来表达的,它是一个比较重要的东西。

然后同时也是一个相对来说比较难的东西,对啊但是我这个前面你介绍这个旋转向量啊,这些基础的话,其实理解起自然数的话也不是那么难,我尽量以一个相对呃直观的方式,给大家介绍一下,然后这个虽然数的发明的历史。

这个也是非常有这个说头,就是这个啊哈密顿勋爵这老头,然后他在这个有一天,因为他脑子里面一直在想这个问题,就是他在想如何去表达这个三维的旋转,用一个什么样的一个数据结构,也不是数据结构。

用一个什么样的数去表达它,好好现在想一直在想这个问题,然后某一天走到这个桥边,走到桥上的时候,突然脑子灵光一现,对墙上写了一个flash of genius,天才的灵光一现,然后他就顿悟了。

顿悟了这个四眼数应该是一个什么样的故事,然后他就他就立马回家去把这个东西推完,推完之后,因为爱情就是对的,所以呢这个桥它也是一个就是一个一个景点,现在就是很多数学家就是什么。

可能有些传统就是啊有时候灵光没有,就是这个没有什么思路的时候,把桥上一走,说不定就灵光乍现,此刻这个哈密顿勋爵灵魂附体,然后就想出来了,好吧,非常有意思的一段故事答疑。

这个东西是建立在这个它本身思考这个问题,很长的一个基础上,那么在介绍这个四元输出前呢,我们可以先从二维旋转入,因为二维旋转,其实大家一般来说会知道这个东西就是复数,它是可以表示二维旋转。

对复数应该是大家都理解的东西,就是啊我在实数上加了一个虚轴,然后用它去啊表示一个复平面,然后这个复平面它正好对应的,有一些旋转的结构,在那我们可以回顾一下二维旋转,它的矩阵表达和复数表达之间的对应关系。

那么这对应是什么呢,就是对于二维旋转来说,我可以用一个旋转矩阵来表达它,就是左边左上角这个形式,那同时我也可以用一个复数去表达它,就是我对于一个XY它可以写成一个复数形式,X加IY。

那么变换之后的这个Z1撇和变换之前的Z,它们之间就是差了一个辅助相乘的关系,那么这个复数相乘是从哪里来的,是从我们可以从下面这里来,就是你去推这个啊,两个复数相乘它的这个乘法的关系。

你就会发现C乘以一个任意的复数Z,它的实部和虚部分别写成这个样子,然后在左边,如果你去拿一个这样一个形式的一个旋转矩阵,对吧,就这样一个反对称矩阵去乘,去乘以一个XY,那么你得到的这个X分量和Y分量。

它正好就对应着复数的这个实部和虚部,那换句话是什么意思呢,就是说复数的乘法cc和Z两个复数的乘数,它其实是可以写成矩阵形式的,它写成矩阵形式,就是我把C变成一个一个反对称的矩阵对吧,跟刚才一样。

就是这个U可以变成一个反对称矩阵,C也可以C变成一个反射矩阵,展成这个这个样子,然后把它跟自己做矩阵乘法乘出来之后,这个X分量和Y分量,它对应的就是这个乘完复数的实部和虚部对吧。

所以说我们可以认为这个C加个方括号,这个东西,它对应的就是这个复数本身的一个矩阵表达,我们可以验证一下,怎么验证呢,比如说对于一个单位啊,纯虚纯虚复数I对他有这样一个关系,就是I的平方等于一。

A的三次方等于负AA的四次方,就等于一这样一个循环关系对吧,那么你对应左边这个,如果把I它的这个矩阵形式写出来,因为它的实部是一,实部是零,所以它的对角线是零,然后它的虚部是一。

所以它这个非对角线一个是负极,一个是一对吧,然后你说你把这个矩阵给它乘一次,乘出来就是一负一,那这个时候对角线上是一,它的实部就是一,非对角线是零,那虚部就是零,所以它这个地方这个矩阵代表的复数。

就是这个一对吧,然后我接着再乘它也会变成这样的结果,这个结果就是负A代表了这个复数啊,复数额负I这个复数的矩阵,标量I的四次方又会回到一个单位矩阵,单位矩阵就是一,所以复数和这个矩阵之间。

是有这样一个对应关系的,那么我们刚才对吧哦对,然后复数还有一个特别的东西是什么,特别的东西是这个复数,它可以写成指数形式对吧,这个公式应该大家都知道,这个公式是就是这个应该叫什么欧拉公式。

E的I派加一等于零对吧,就是这个公式,那么你同样如果复数有这样一个指数形式的话,那么这边这边的矩阵,它也就会有这样一个指数形式,就是我把这个啊这个矩阵,把它写到这个指数里面来。

那对应的就会是一个这样一个级数的形式,然后你把这个级数展开,跟我们刚才推那个三维旋转的,那个罗德里的公式,跟指数的关系一样,把它合并一下,对应的这个项提到一起,然后看一下前面的系数。

就会发现一个是cos theta,一个是sin theta,然后你把它存起来再拿出来,你就会得到这个最开始我们的这个旋转矩阵,OK吧,所以复数和矩阵两个东西他们描述的是同一个,就是可以描述同一个概念。

都可以用来表示这个二维旋转,那么四元数是什么,四元数其实就是我们引入的一个,跟三维矩阵相对应的一个用来表示啊,三维旋转的一个代数,可以这么来想,它,对吧就是四元素是啊适用于旋转的一个虚数。

那如果你二维旋转有那些虚数表达的话,那我三维旋转就可以有一些对应的四元数表达,好吧那好,那我们虽然说是什么东西呢,算数它跟复数有点像,只不过呢它除了有个I之外,它还会有J有KIJK3个东西都是啊。

都是这个虚数,可以认为是类似于虚数的东西,那么复数对应的是复平面的话,那么四元数对应就是一个四维的空间,就是它有四个轴,分别是实数轴,然后A的轴,J的轴和K的轴,那么IJK3个东西。

三个这个可以称为类似于这个基石的一个东西,他们之间满足这样一个相乘的关系,就是A的平方等于一,J的平方等于一,K的平方等于一,同时IJK3个相乘也等于一,这就是四元数额,最开始的定义就是定义这么一个数。

它满足这样的运算规则,那么由此我就可以去啊,推导出这个四元数的乘法怎么推呢,就是我把这个两个四元数,比如说呃这两个数数一共八个系数对吧,A b c d e f g h,然后我去看它对应的这个复数相乘。

比如说这个啊bi乘以FI它对应的就是BF,然后A的平方A的平方是一,那对应最后乘出来是个实数对吧,然后呢其他的比如说J乘以K怎么办,J乘以K怎么办,这乘以K我们可以从刚才的那个定义里面推。

就是A的平方等于IJK对吧,所以这乘以K就等于A了,两边同时约掉一个I嘛,对吧,所以它有这样的相乘关系,那么呃我就可以把它对应的都展开,那么乘出来之后,两个四元数乘法。

它就会写成这个相对来说比较复杂的形式,它最后乘出来还是一个四元数,还有一个十部,有个I对应的虚部,有个J对应的虚部,有个K对应的虚部,它前面的系数都比较长,那么为了这个做这个简便计算呢。

右边会放一个乘法表对吧,你可以去查,就这个比如说1×1等就是一,然后I乘以I,这就是一,没说你可以去查这个乘法表,那除此之外呢,我可以把它写成这样一个矩阵的形式,跟刚才这个虚数一样,两个四元数相乘。

我可以先把第一个四元数变成一个反对称,矩阵的形式,反正写出来是这个样子,然后把它和后面一个向量做这个矩阵乘法好吧,就是我可以用上面这种方法,然后去对乘法表,然后也可以直接用这个矩阵去算。

他的这个自然数的这四个分量,这个关于四元数乘法,大家有问题,Ok,那么虽然数乘法我们刚才是这么定义的对吧,那其实还有一个另外的写法,造这个REMADY的一个形式,也就是说资源数虽然它是啊四个分量对吧。

但是我可以选择这样一个写的形式,把它写成一个一个标量,加上一个类似于矢量的东西,就是A是一个标量,然后V它是对应类似于一个矢量的东西,这个矢量它有三个维度,然后呢每个维度上有个基石,对应的是IJK。

这我可以把一个四维呃,四呃四个参数的东西写成这样一个一个标量,加上一个视量,那么这样写有什么好处呢,这样写的好处就是说两个线数相乘,可以简便的写成下面这样一个紧的形式,这个形式怎么来的呢。

就是你去分别去看,我们刚才推出来这个形式,你去看,比如说A乘以E,对应的就是这两个四元数的标量部分,的乘法对吧,然后BF负BF减cg减去DH,负BF减cg减去DH,它其实对应的就是后面两个向量的部分。

这两个向量这两项,你可以把它理解成就是正常的向量,它就不是四元数了,这两个向量做点乘对吧,所以说如果你把两个四元数写成这个形式的话,那么它的这个乘法其实是有个简便的记法,形成下面这个样子。

然后为什么虽然数跟这个旋转有关系呢,这个地方其实就已经能体现出来,为什么,因为你发现这个地方有个V叉乘上U,它其实是有个叉乘的结构在的,那么这个东西就有可能,我们后面就会利用这个东西去构造它。

这个把它去跟那个旋转矩阵建立联系对吧,所以选择矩阵里面也会有查成,那同时通过这个公式,大家可以发现这个四元数的乘法,它也也是不满足这个交换率的,就是Q1乘以Q2和Q2乘以Q1,它是不一样的对吧。

因为我这地方有个叉乘在,如果叉乘你交换顺序的话,它是会加一个符号的,然后同时对于这个如果两个四元数,如果对一个四元数来说,它的实部是零,就是个A等于零或者一等于零的话,我们称这样算数为纯四数。

或者叫纯虚数元素都可以,那么这个时候他的这个乘法就会有一些简化,因为它A和E都是零嘛,所以它的对应乘出来,这个实部就只有一个负的点乘,然后虚部就只有一个叉乘,所以这个纯虽然数的乘法。

它就是一个能够反映向量之间进行操作的,一些东西,然后我们在上一页4S也介绍这个,虽然数它可以写成这样一个矩阵形式,那么这样一个矩阵形式呢,你也可以把它简化简化成利用这个啊,标量加向量的方式。

把它简化成右边这个形式对吧,跟左边其实是一模一样的对吧,这地方有个A然后BCD对应就是微转制,ACD就是E,然后对角线A挪出来,剩下的这个东西,它就对应的是一个叉乘矩阵的形式,就是把V1拿出来。

然后写那个查询组织,查指针就长成这个样子对吧,所以对于四元数来说的话,我们其实介绍了三种表示,第一种是这个开始定义它的这个分量表示,第二种是一种向量表示,第三种是一种矩阵表示。

这三种表示它们表示的都是同一个四元数,那么我们可以分别在这三个表示下去,定义这个自然数的共轭,一个虽然说的共轭就像虚数的共轭一样,他就是把这个对应的这个虚根,这个IJK前面这个正号变成一个负号对吧。

就这样一个Q在分量形式上写出来,这个Q它的共轭q star就是这个A,然后后面三个是负号,那么定义功课有一个好处,就是Q乘以q star本身啊,Q乘以q star两个东西相乘乘出来。

你会发现它是一个纯实数,它后面的那些虚虚量全都相互抵消了,大家可以使用那个最开始那个乘法表,回去自己推一推,你会发现后面那些IJK前面的系数全都是零,只剩下最开始的这个实数,A方加B方加C方加D方。

那么这个东西它又很好,它实际上代表的是这个Q,我们可以定义,它是它这个Q4元数的模长的平方,对我就是把四个啊四个这个参数拿出来平方,然后给它加和,我们也可以从向量形式下来看这个形式,看这个看这个过程。

对一个一个四元数可以写成它的一个向量,表达AV,然后它的共轭就是在这个V前面加一个负号,那么Q乘以q star两位相乘,它对应的实数部分,我们可以回到刚才这个啊。

这个GRAMMAGE的这个形式是等于AE减去V,减乘一,就是前面两个标量相乘,减去后面两个矢量点乘,那么后面两个前面两个标量乘,就是A方面两个矢量乘就是V减去V,就是V点乘V。

所以就是啊A方加上B减乘一,那这个东西它也就是A方加B方加,C方加D对吧,那么后面这一项啊,纯虚的这部分,因为后面这一项里面它存在这个U叉乘V,所以这项是零,然后同时前面AU加上EV对应到我们这个形式。

就是ab减去av它正好也抵消了,所以也是零,所以通过向量表达,你可以简单的看到说两个共一个啊,虽然数乘以它的共轭对应的乘出来,它就是一个纯实数,对矩阵形式下一样的矩阵形式,给大家推一下这个两个矩阵相乘。

分块矩阵相乘,乘出来之后,它对应的也是一个对角,类似于分块对角的形式啊,就纯对角的形式,这个纯对角矩阵就是一个啊单位啊,就这个不是什么东西,这个纯实数对应的矩阵,所以我们三种表示都可以推到同样的结果。

就是如果我们定义的这样一个共轭的话,我们虽然数乘以它的共轭,代表的就是最后得出来就是一个纯实数,那么利用这个纯实数,我们就可以去定义一个算数的逆,Q的逆,它可以显示后面这个形式。

为什么它可以显示后面这个形式呢,因为你左右两,你左边乘一个Q的话,那么自然就会有这个Q模长的平方分之一,乘以Q乘以Q2,那么结果就是一了对吧,所以Q乘Q逆等于一,那么QE就可以展开成这个形式。

所以利用共轭我们可以去推出这个呃,虽然说的逆应该长成什么样子,然后呢,如果我们这个算数是一个单位数,单位次数就是说这个Q它的模长是一的话,那么就会直接有这个Q的逆,等这个Q等于就是说单位四元数。

它的逆就是它的共轭,OK应该没什么问题吧,那好有了这个素数的定义之后,以及他的一些兴趣之后,我们接下来就可以去看这个四元数和旋转,之间的关系到底是什么,假设我们考虑的一个情况。

比如说我有一个三维空间中的向量V,我要对它进行旋转,那么首先这个V我可以把它写成一个,纯虚四元数的形式对吧,我可以把它实数直接为零,然后我考虑一个任意的一个四元数。

Q它写成Q等于ST这个形式的Q的四元数,横到这个V上去,我们来看一下Q乘以V乘出来是什么结果,那么Q乘以V,根据前面那个GRAMMAGE的那个形式,你可以变成这样一个形式。

如果我们先忽略掉这个层级的这个实部,我们先只看它的虚部,就会发现一些很有意思的结论,我这边下面这个公式是我们前面推出来,这个罗德里的公式对吧,那么可以对应一下,这里有一项S乘以BS是个标量对吧。

然后罗德里公式里面有个cos c a乘以B,后面有一项T叉乘B有个矩阵叉乘的形式,罗列公式里面也有一项一个一个向量叉乘,一个V的形式对吧,那么如果我对应起来。

我就定义这个Q把他的S定义成cos theta,然后这个T定义成三,THEA乘以U定义这么一个四元数,然后把这个四元数乘到这个U乘到V上来,QV等于后面这个结果,那么后面这个它的关注它的这个虚数部分。

不是他纯虚的部分,那么这个公式看起来就比较接近于,这个旋转变换的这个形式了,但是呢这个形式它差了中间这一项,然后以及它还有这样一个实部,在这个地方,这个实物具体是什么含义,我们其实并不清楚对吧。

那么这个四元数与旋转之间的对应关系,到底是什么,这里我就不去给大家去讲背后到底是为什么,因为这个东西讲起来其实挺挺难的,我自己其实也没有完全弄明白,但是呢我们可以啊可以直接去推这个结果。

就是我假设我告诉你说我们可以啊,Q还是取这个形式,但是我们不直接把这个Q乘到这个V上,而是后面再乘一个Q的逆,这个东西它会有一些好的结果,但我们可以推一下这个结果对吧。

我们刚才说的这个对于单位虽然数而言,它的逆对应的就是它的共轭对吧,那么这个东西它是不是一个单位四元数的,应该是的吧,因为这个cos theta的平方加sin的sin,theta的平方就是一。

所以Q是一个单位四元数,那么它的逆就是这个cos theta-3C塔U,然后呢这个我们可以看这个QV乘以Q的逆,他最后推出来是什么样子,这个地方为了推导了简化,我们可以把这个cos theta。

sin c塔简写成C和SC就是cos theta,S就是sin theta,然后呢你把这个算数乘法写开,利用这个grammar的这个形式给它展开,先展开前面两先展开,后面两项变成后面这个结果。

再乘以前面那个,然后等等等等,一直到这个公式,这个公式就是我们最终推出来的这个啊,QV乘以QE这个乘法的结果,我们还可以进一步化解,比如说这个实数部分,cs一点乘U减去后面这坨东西。

你再去会发现什么U啊,然后U点乘V叉乘U,V叉乘U1定是一个垂直于U的东西,那么你去点乘一个U的话,它结果一定是零,所以后面的项是零,那么前面这个实数部分就只剩下这个cs v。

点乘U减去SU点乘CV对吧,那自然就是零对吧,所以他最后乘出来这实部分就是零,然后虚数部分我们可以把这些东西给它展开,对啊,利用这个三叉乘的这个公式把这项打开,然后跟前面几项结合在一起。

可以写成下面这个形式对吧,然后下面这个形式呢它又非常妙的,我们看一下这下面这个形式,分别前面的系数是什么,C的平方减去X的平方,也就是cos西塔的平方减去sin西塔的平方,这个其实就是二倍角公式对吧。

那对应的就是cos2theta,然后2SC就是二乘以sin theta乘以cos theta,就是sin2theta对吧,然后两倍的X的平方,两倍SC的平方也一样的,用倍角公式一减去cos2C的那好。

那这个形式它就跟我们的这个罗德里的公式,就完全一样了对吧,只不过阿里公式里面都是cos theta,Sin theta,在这个地方推出来的是这个cos2theta,Sin2,西塔一减cos2theta。

除此之外,其他的一模一样,所以说这个QV乘以QE的这个形式,它其实对应的就是旋转,并且它对应的不是旋转的CA,而是一个旋转了两倍的C塔西,那么利用这个公式,我们就可以写出这个四元数与旋转,这个对应关系。

这对应关系是什么呢,是对于空间中任意一个向量V1个三维的向量,我可以先把它写成一个四元数,然后把实部置为零,然后Q呢是一个单位四元数,它的实部是cos2分之theta,然后sin,然后虚部是sin。

二分之theta乘以UU是对应的旋转轴,然后呢我只要把U乘以V再乘以Q,新利用四元数乘法的那个公式长出的这个结果,最后得到的就是这个最终的这个旋转,之后的向量,对吧,所以说啊旋转三维中的旋转。

它和四元数之间有这样一个对应关系,然后他这个地方非常妙的是,他需要用这样一个三明治乘法的结构,就是我要把V放在两个Q的中间,然后同时呢这个Q代表也不是直接转C塔角,而是转二分之1C塔角。

这个其实就是啊四元数的这个呃,这个这个和旋转的关系,然后至于为什么会有这样的旋转关系,大家可以去看一下这个,比如说这个随时brown brown,one brown这个视频还有非常好的这个可视化的解释。

然后以及呢这个网上也有一个这个呃,这个这个这个我不知道怎么读fate,这个这个同学给了一个非常好的一个呃,一个教程,大家如果想详细了解里面的这些门道的话,可以去看一下这些资料。

但是呢啊如果你只是想用的话,你就把这个公式记住就可以,就是说这个四元数与旋转之间,满足这样一个关系,OK吧这个其实是虽然说最核心的一个公式,大家就能理解就挺好的,看看嗯嗯,OK大家有问题吗。

那具体推导的话,大家可以下去自己推一下试,Q的自由度也是三和前面一致,对对这个我们后面也会讲,就是对,就是Q虽然是四元数,但是因为我的Q是单位给他加一个约束,所以它自由度是三,OK没问题,那我们就继续。

那虽然数额它用它来表示旋转,它也会有一些对应的性质,比如说我们说旋转它是满足这个呃结合律的,它是一个乘法群嘛,它是满足群的这个结构的,那么虽然数也是一样的,对于多次旋转来说的话,我其实不需要把这个写用。

把它写成这个三明治乘法的形式,我只要单次做,就是这个把这个四元数拿出来,然后一路给他乘过去,就可以得到最终的旋转对应的那个四元数,Q为什么呢,你就可以一步一步来嘛对吧,我第一次旋转这个啊V1等于Q1。

V乘以Q1star,然后第二次旋转V2呢,它是在V1的基础上再乘以Q2,然后把V1写进写进来,它会显示后面这个形式,那你你看后面这个形式,它其实就是直接做了一次啊,Q2乘以TV的这个四元素对应的选择。

然后这个地方利用到一个素数的这个呃go呃,这个呃共轭的一个一个一个公式,就是Q1的共轭乘以Q2的共轭,等于Q2乘以Q1几次元素的共轭吧,大家可以推一推,然后还有一点非常重要。

就是算数里面Q和负负Q表示的是相同的旋转,这点可能比较奇怪,就是我把Q加一个负号的话,但是从公式上还是很直接的,就是你加一个负号之后,因为我成了Q两次,所以这个-1×-1,它就变成一了。

所以Q和负Q表示的其实是相同的选择,然后其次呢四元数它同样有指数形式,这个指数形式呢跟我们之前的那个啊,矩阵的指数形式是一样的,对应起来的对吧,我们刚才在二维情况里面说说,二维矩阵有指数形式。

二维复数也有指数形式,然后我们又推了三维矩阵,有辅助,有有指数形式的话,然后对应的四元数对应的也有它的指数形式,它指数形式就长成这个样子,就是这个Q2分之cos2分之theta sin,二分之塔U。

这个四元数它可以写成这个二分之THETU的,好一个指数形式,这个U就是一个四元数,它是一个表示旋转轴的一个纯算数,那这样的话我们的旋转矩阵就可以写旋转向量,也可以写成下面这个形式,这个指数形式呃。

只是给大家看一看,就是基本上没啥用,你要算的话,实际算的话还是得回到那个刚才定义那些gram,那些公式里面去还好,那么有了虽然数之后呢,我们其实对于旋转流行本身,就会有一个非常直观的了解。

我们刚才说就是旋转矩阵啊,旋转矩阵它的自由度是三对吧,它对应是一个九维空间中的三维向量,但是如果我采用四维虽然数去表达的话,自然数本身它是在四维空间里的,因为它有四个参量嘛。

然后同时呢能够表示旋转的四元数,它一定是单位四元数,他就会那意思就是说对于一个四元数来说,只要它是单位四元数,它就代表一个旋转,那么所有单位四元数,在这个四维空间中组合起来。

它就对应的是一个四维的一个球体对吧,也不是球体,就是球的表面,说球体可能不太准确,所以你用四元数去观察旋转的话,它对应的就是一个四维空间中的三维流行,那这个东西比如说我们接下来再讨论一个问题。

就是还是回到这个旋转的差值问题上来,它就会有一个非常直观的理解对吧,我要在一个球面上进行插值,我有球面上有两个点,一个是Q点,一个是Q1,代表两个旋转R0和R1,我要这个球面上做差值的话。

那我自然是要在这个球面上找一个弧对吧,一般来说还是找的这个最大的这个弧,然后在这个湖上做这个差值,这是一个很急的想法,那我们确实可以这么做,比如说我们先看第一种插值方法叫ENERT方法。

N2方法怎么做呢,就是我有两个四元数,比如说这个Q0和Q1,我先给他做线性差值,差值差完之后,它就不是单位四元数了对吧,那我直接给他做一次normalization,那这个时候呢你这个点一定落在弧线上。

于是我就完成了一个差值,但是这么做差值的结果呢,就是右上角这个展示的样子,你就会发现它对吧,他有一个很明显的问题是什么呢,他先开始转的慢,中间一下会转的特别快,然后再到末尾的地方就转的慢了。

这个是为什么呢,我们可以通过这个图来表示对吧,假设这个我们把这个球面上这个弧,这个截面单独拿出来,它是个圆对吧,然后呢我在上面做这个alert,然后你会发现一个什么问题。

就是虽然我这个东西我做n up时候,其实我就是在V0和V1这条线上动了,他在这条线上,在它这个这个叫什么来着,这个叫弦对吧,这个圆的弦上啊,匀速运动,匀速差值,但是如果你做一次NOONZATION。

把它project到这个湖上之后呢,他在湖上扫过的长度其实不是一个匀速的过程,它就是一个会先慢后快的过程,比如说我们取几个点观察,取它的这个四等分点对吧,0。250。50。75,你看它对应的这个位置。

你就会发现,虽然他的这个弦上是四等分的,但是它对应到弧上的话,中间这段会特别长,它在湖上的这个速度不是一个匀速,而这个弧上速度不是一个匀速导致的结果,就是你最后旋转的速度不是一个匀速。

为什么我们可以推一下对吧,假设我们有两个四元数,一个Q0,它是一零对,就是取一个点固定了Q1,它是一个cos2分,最大sin2分3U它代表一个旋转,我们可以算一下这个Q0和Q1,两个四维向量的夹角。

两个四维向量的夹角啊,算两个向量夹角,这个我们计算几个,特别讲,你先算点乘,然后再除以两个向量的模长对吧,你算cos两个两个向量的夹角,cos1F然后你用那个点乘公式算一下。

你会发现它等于二分之1theta对吧,因为两个东西都是单位算,所以分母是一,然后分子是cos2分之C塔,那这个公式代代表什么含义,cos y等于cos2分之西塔,那代表F和theta之间就有这样的关系。

F等于12的西塔,这代表什么含义呢,就是说如果我从上面这个样子到下面这个样子,他转过了其他角,那么其实对应四元数,它在球面上扫过的角度是二分之C塔,它是之间有这样一个成比例的关系。

所以说如果我这个在这个扫过的这个弧上的,这个角度,它不是一个匀速的话,那么你扫过的这个theta角它也就不是一个匀速,他这个实际的这个旋转角度,theta就不是一个匀速的旋转。

那导致的结果就是这个它会有这样,上面这个信息,他先转的慢,然后再转快,然后再转的慢,这么一个很明显的这样一个加速,减速的一个过程,所以这个过程我们是不希望的,那么解决方法也很简单。

那你就让他这个角度是均匀变化的就可以了,怎么让它均匀变化,就对应的这个另外一个插值方法叫SLP对吧,就是会叫sophical lb linear interpolation slip。

它代表的含义就是说我这个差值这个向量呢,它在这个空间中,它是以一个啊匀速的角速度去扫过这个弧面的,也就是说在T时刻,它跟V0的夹角是t theta,然后跟V的夹角是一减T乘以C塔。

然后这个东西它会对应出来一个公式,就是左边这个公式,它也会对应两个系数,然后这两个系数它就不再简单是T和一减T,而是这样一个啊,需要计算一个sin值的一个东西。

然后theta代表的是这个两个四元数之间的实际,这个夹角,那我们可以看一下这个serve插值的结果,它就比这个N2要好很多,它就是一个匀速转动的一个东西对吧,所以如果你希望你插着结果是匀速转动的结果。

那尽可能的还是用这个slap,然后这个公式它本身它呃,它本身这个推导我这里就不推了,然后我们作业里面应该是有道题,就是大家可以去尝试推一下,这个公式到底是什么样子,这个如果你上网找的话。

也肯定能找到很多的推导,但如果你感兴趣的话,你可以自己推一下,试一试,它具体的思路就是你去算这个VT呃,跟V0的点乘,然后和V1的点乘,然后让他满足这个夹角关系,然后建立两个方程。

然后把这个方程系数解出来,就是这两个系数对啊,但是也有一点值得说的,就是说虽然SK能够保证角速差值啊,角速度是稳定的,但是它计算起来会比N乐要慢,其实很明显,因为SQL你需要算这个sin theta。

但是NERF的话,你其实只需要做一次简单的线性插值就可以,所以NERF会比SP快很多,然后呢在什么情况下,他们两个结果是相近的,如果你的这个差值的,两帧之间的这个角度变化不是特别大的话。

就是它的两个点很近的话,其实ENDER和swap是看不出来明显差别的,所以说如果你的差值的这个变化,角度不是很大的话,用NERF可能也看不出来明显的这个artifact,但是如果你为了这个东西。

它百分之百准确,为了它的这个稳定性的话,可以用SR,但是同时SP也是需要注意的地方,就是这个比如说我C它角度特别小的话,这个sin c塔它可能就特别小,这时候你需要处理一些额数值上的问题,OK吧。

所以这就是四元数非常重要的一个概念,呃虽然说为什么大家用的多,其实也是因为他这个他这个差值大家会经常用,然后还有一点需要注意,就是这个虽然数,我们刚才介绍了一个四元数的概念。

一个一个性质是正Q和负Q表达的是相同的,旋转,对吧,那么我在Q0和Q1Q1之间差值的时候,看右边这个图的话,它其实就两种选择,我可以从Q0到Q1走一个很长的弧过去,我也可以从Q0到负QE走,有很短的弧。

然后因为Q1和FK表示表示的这个旋转,其实是同一个旋转,那么其实你这个短弧和长弧,它都是两个旋转之间的差距,它反映的区别是什么呢,是这个长弧,它反映的就是你去一个一个相对来说比较长的,那个呃。

角度距离相差比较大的那个角度方向进行旋转,暖和就是走的距离会更短一点对吧,你从这个两个这个视频上明显看到,长湖它是绕了一大圈,回到那个角度,但是短弧其实走一个最短最短角,所以在进行插值的时候呢。

虽然数插值的时候也需要注意一下这个点,就是如果你发现你要插值的两个四元数之间,的夹角是大于1/2的呃,二分之派的时候就是大于90度的时候,你就可以把它其中一个取反,然后走一个最短,少走一个短对。

走一个优弧去完成这个差距,所以总结来说的话,我们今天主要介绍就是旋转的三种表示方法,第一种是欧拉角,第二种是轴角,第三种是次元数,然后对于欧拉角来说的话,总体来说他操作是很直观的,它的意义也很直观。

但是它的规范是非常复杂的,同时呢它最大的问题是它有万向锁,并且如果你要你要使用欧拉角进行插值的话,这个可想而知,效果应该是不会特别好,因为他这个走的这个路径,肯定不是一个最短路径,然后对于主角来说的话。

其实它就是旋转本身的定义,然后呢它也可以进行插值,它差值的结果其实跟12,如果你使用对的差值方法,就是我们刚才介绍这个相对差值的旋转方法,和四元数的12结果是等价的,这个其实也是我们作为题的一部分。

就是大家可以推一下为什么等级啊,呃但是呢所有主角相对于四元数来说,用的还是相对少一点,为什么,因为它需要大量的矩阵运算,但是四元数的话,你你啊旋转之间做运算之后,你只需要做这个四元数本身的运算。

它其实是会更方便一些,它计算效率会更高的,那自然数它就会非常好的,这个一些性质就是它计算效率很高,同时这个组合起来也方便,查找起来也方便,采样也方便,但是它唯一的问题就是。

你虽然说理解起来会稍微有点麻烦,就是他需要这个他不是特别直观,它最直观的理解方式,反而是就你把四元数转换成主角,用主角去理解这样一个旋转的话,它会更直观一些,OK吧,所以这就是啊一般是比较常用的几种的。

这个旋转的表示方法,就是在不同的情况,不同情况下,根据情况使用就可以,呃然后我们在开始的时候提了一个问题,是说这个我们网神经网络对吧,他可能输出旋转,那么你只用神经网络去输出旋转,不管是做回归也好。

还是做预测也好,还是做别的做生成,那么对于一个神经网络来说,它适合的这个旋转表达应该是什么呢,呃这个地方的问题在于说,我们之前介绍的欧拉角,主角四元数其实都不一定适合他们,有一些通用的问题。

最大的通用问题是他们有多异性,就是说比如说以欧拉角为例的话,相差二派角度就是360度的角度的话,它表示的是相同的旋转,如果你转十度和转个370度,它代表的是相同的含义。

那这个时候如果你让网络去输出这个角度的话,他有可能露出十度给你,他也有可能会输到360,370度给你,这两个结果,他最后的那个loss值可能都是一样的,你因为你的目标是只跟最后的旋转是有关的。

那这个时候网络它就会面对这样的独立性,它就会有很多个的,相当于是不同的这个minimum的结果,以免了优化方向,那只有他就可能出现一些优化上的问题,对于主角来说是一样的对吧。

你啊沿Z轴绕C大角表示的旋转,和你绕负Z轴转太减C塔角是一样的,虽然数的话Q和负Q的结果是相同的,所以说这三种表示方法在表达旋转的时候,都不可避免地出现了多异性的问题。

这个东西会可能就会影响到你网络的优化,那如果你做一个操作,就是啊,比如说我强强就强制我说你的这个,比如说欧拉角里面,所有的角度范围都是0~2派,这个时候也会出现问题,就说比如说右边这个图上画的就是。

呃明明我在零点附近,它可能有一个正的角度,有一个负的角度,它表示的旋转其实是相邻的一个旋转对吧,你往X正方向转一点和X负方向转一点,这其实是一个很接近的结果,但是你在角度上看。

如果我把它强制限制到了0~2派的话,那么这个你就正的那个方向,还好说负的那个方向它就立马会啊变到一个啊,你的这个二派的附近,比如说因为我原来是正十,-12个东西是相近的,但由于你限制了我的角度范围。

在0~2派,它就会变成正十和-350啊,这个东西就是一个不连续的现象,不连续的对于网络优化说,总量也是非常难以处理的,所以说啊之前介绍这些旋转方选项表示方法,它可能在啊。

对于神经网络来说可能都不是最优的,那么这个问题它也是一个,就是一个研究的问题嘛,就会有research researcher,有研究者去提出,更好的适用于神经网络的行动表,比如说这个地方非常经典的。

这个6D的旋转表达,虽然说我们我们说旋转,它本身的自由度是三维的,但是呢我们可以让网络输出一个6D的向量啊,66D自由度的一个一个东西,它实际上代表两个向量A1和A2,然后呢我干点什么事呢。

就是对A1和A2进行这个史密斯正交化,对吧,我固定A1把A1作为我的第一个方向,然后把它做MALIZATION,然后B2呢我让他和A1正交对吧,我从A2里面减去这个和,减去这个他在B1上投影的部分。

剩下这个呃和B1垂直的部分,然后B3呢就是把B1和B2相乘起来,那么这样的话我就能保证B1B2,B3都是normal,都是单位向量,并且它们是相互垂直的,那于是我就可以把他们三个组合成,一个旋转矩阵。

变成一个R,然后并且我能保证它是一个正交矩阵,并且它的特征值是正一的,那它表示的就是一个旋转,那么很显然的是,这个6D的旋律表达它是冗余的对吧,就是我有很多的啊,因为本质上旋转是三维的对吧。

所以我就有很多的输出,他其实对应的是同一个旋转,它的好处是什么,它好处是在它是连续的,就是你虽然有冗余,但是你冗余的那一片基本上都是连续的,就是我是把一个区域映射到了一个。

把一个连续区域内的一片的六维的向量,映射到了同一个旋转上,那这种连续性对于网络来说就是他非常喜欢的,那就是6D旋转的,在某些特定的任务上,他就会表现的比这个之前的,不管四元数也好还是轴角也好。

他表现的更好一些,但这个东西也不是绝对的,就是说这个具体要看你用神经网络的时候呃,到底是一个什么样结构的神经网络对吧,比如说你有些例外,比如说呃这个地方这个three digglitting。

这边paper是吧,大家如果读过它的话,你会发现它里面的这个旋转的表达,其实是一个就是四元素的表达,虽然它不是神经网络,但是它也是一个优化问题对吧,但是它里面用的这个优化的表达还是四元数。

然后同时呢除了6G之外,我们还有9D的表达,就是再加三个维度,我除了能model这个旋转,我还能model这个旋转的不确定度对吧,这就是一个就是研究上的问题了,大家如果对这个方向感兴趣的话。

你可以去看一看这些论文,然后再再再再想一下,但是一般来说如果是一个,如果你直接拿来用的话,那你可以先试试这个6D6D一般还可以吧。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

OK那介绍完旋转表达之后,对我们学生表达到这里就基本上介绍完了对吧,就是还剩下最后一个问题,就是这个角速度与旋转之间的关系到底是什么,对吧这个东西它会用在什么地方呢,就是如果你要做模拟对吧。

就是如果你要模拟一个刚体,那你建立方程都是角速度的方程,如果去我如何利用角速度去更新,最后这个刚体的旋转,所以我就必须去知道,这个角速度与旋转矩阵之间的关系。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么接下来就看一下这个关系,我们先从一个就是啊,非常具体的一个情况来开始推,就比如说我这样一个T字形的一个扳手,然后呢它上面固定了有一个局部坐标系对吧,这个蓝色的局部坐标系啊,上面有一个点XL。

这个XL呢,它是这个点在局部坐标系下的局部坐标XL,然后呢它对应的也有一个全局坐标对吧,就是这个点,它在全局世界坐标系里面的坐标到底是什么,是XW那么XW和XL之间满足这样一个关系。

这个我们在前面就已经推过了,大家应该还记得,就是在这个讲欧拉角的时候,推过了这个啊,不同坐标系的这个啊这个啊坐标转换,那好那如果我现在去考虑这样一个点,它在旋转之中,它的速度到底是多少。

我觉得可以去看这个啊,这个点XW它上面点一点,就是代表他对时间求导XW一点,就是这个XW对于时间的导数,它应该等于什么呢,应该等于角速度差乘XW对吧,这个就是角速度本身的定义,一个点的速度等于角速度。

叉乘上,如果是纯旋转的话,就是角速度,欧米伽叉乘,它相对于这个你观察点的那个圆形的那个位置,和W对吧,那这个叉乘呢,我就可以写成一个叉乘矩阵的形式对吧,还是这个地方就U叉乘矩阵的形式。

然后呢XW我可以代入上面,就是RR乘以XL,所以这个就是在世界坐标系下,这个这个点它的速度表达式,那么还有另外一种推法是什么呢,是我直接从这个XW的形式出发,我直接对他对时间求导XW一点。

它就应该等于什么,等于R1点乘以XL加上R乘以XL一点对吧,这是乘法的求导公式,但是呢XL因为它是在局部坐标系的,我认为这个点它是随着这个东西一起动的,所以它在局部坐标系下是一个固定的一个值。

所以XL一点就等于零了,那么这个XW一点就只剩下R1点乘以XL一点,那于是我把这个式子,第二个式子和第三个第三个式子结合在一起看,我就可以立马得到下面这个关系,就是一个旋转矩阵求导。

它等于一个角速度的一个叉乘矩阵,乘以这个旋转矩阵本身,那这个公式对应的其实就是旋转矩阵,求导的和角速度之间的关系,或者说我们建议的角速度,与旋转矩阵之间的关系。

OK我们也可以从另外一个视角去想这样一个问,题对吧,我们刚开始我们就开始说了,说这个旋转它是一个流行,它是一个三维流形,而角速度其实反映的是它的一切空间的情况,那我们可以怎么看这个事情呢。

我们还是回到这个旋转矩阵的表达,旋转矩阵,我认为它是一个九维空间中的三维流行啊,那么旋转矩阵转置乘以旋转矩阵本身,它是一个单位矩阵,这是我的约束对吧,我可以把这个约束对时间求导那么一样,左边是这个呃。

左边的这个是这个按时间求导的,这个乘法的这个展开,然后注意到后面这个矩阵R1点乘以R转至,包括前面前面这个吧,前面这个R转置乘以R1点,它其实就是R1点乘以R转置,在外面套一个转置是吧,你把转置搞进去。

它就是这个结果,那么加起来等于右边单位矩阵对时间求导,那就是零对吧,那么这个式子告诉我们什么,告诉我们说这个R1点乘以R转置,它是一个反对称矩阵,一个矩阵的转置加上它本身等于零。

那么这个矩阵就是一个反对称矩阵,我们可以定义这个反对称矩阵,为这个这样一个形式,这个形式其实我可以理解成是欧米伽的,这个角度的一个定义是,我先不管我们的物理意义是什么,我就给它定义成这个样子。

因为他反正是一个反对称矩阵,它一定是长成这个样子对吧,那好我定义它之后,我再把它把这个R转至两边乘一个R,那就可以得到这个R1点等于欧米伽,欧米伽的叉乘9×2,所以我们从不同的视角导出了相同的公式。

并且我们可以立马知道这个右边这个推导里面,这个欧米伽的具体物理含义,其实就是这个刚体的角速度,对这里可能呃可能理解起来有一点有点难,因为这地方涉及到求导,新宇在前面讲线性代数据。

给大家讲这个矩阵求导应该怎么求,然后大家如果不是就是呃,如果不是做simulation的话,不是做模拟的话,其实这部分也不是特别需要了解,一般只有模拟情况才会出现,你要对时间求导的。

OK那角速度我们现在定义了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

但是呢关于角速度还想再多说一点,就是这个角速度我们刚才推的这个角速度,它其实是在定义在这个视觉坐标系下的角速度,但是呢我们有的时候也会用到另外一种定义,就是把这个角速度,分解到这个局部坐标系上来看。

那么这个时候它就会变成另外一种形式,我们可以推一下这个形式长什么样子,怎么推呢,就是我把这个欧米伽叉乘矩阵乘以R,后面乘以一个任意一个向量U,这个U向量是一个任意的三位向量,我不管它是什么。

然后我把这个式子展开,它对应的就是omega叉乘RU,然后欧米伽呢我前面给他乘以个RRT,因为R本身是一个正交矩阵,所以RT就是单位矩阵就成了,就相当于没乘,那写成这个样子,你就可以看到叉乘的两个向量。

它的左边都有一个旋转矩阵,R我就可以把这个R矩阵提出来,为什么可以提呢,就是你想两个两个矩阵,两个向量它先旋转R角度,然后再查成和我先插成在一起啊,再旋转R角度,它出来的这个结果应该是一样的对吧。

所以我可以把这个R矩阵单独提出来,取出来之后里面就只剩下这个RT omega x成U了,然后再把这个叉乘写成矩阵相乘的形式对吧,它就变成后面那个式子,然后由于我的U是任意选的,所以我的左边这个欧米伽R。

它就等于右边这个玩RT欧米伽对吧,然后这个欧米伽R我们刚才已经推过了,他是这个R矩阵的导数,它又等于欧米伽R又等于R乘以RRT欧米伽,这个RT欧米伽是什么,它其实就是这个角速度通过一个坐标变换。

变换到局部坐标系下的结果,对吧,因为我们之前推过了,说一个向量从局部坐标系变换到世界坐标系,中间差的是一个旋转矩阵R,那么现在我把一个向量从一个世界坐标系,转换到局部坐标系的话。

我只需要在前面乘个转置就可以,因此这个我就可以把它写成这个,R乘以欧米伽一撇,欧米伽一撇就是局部坐标系下的角度,把角速度,所以对于同样一个选项指针求导,我既可以写成欧米伽乘在R左边的形式。

又可以写成RR乘以欧米伽在右边的形式,唯一的区别就在于说,如果你乘在左边,那么这个欧米伽表示,就是世界坐标系下的坐标和角速度,然后如果你乘在右边的话,那么这个欧米伽表示,就是局部坐标系下的角速度。

所以这个要具体看,你就是啊算出来是哪个角速度,然后再把它更新到按照对应的这个位置。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

更新到这个R上,OK吧,所以推完了这个角速度与旋转矩阵的关系,我们可以最后来看一下,这个四元数与角速度的关系,因为很有可能你这个旋转最后表示的,它就是一个四元数的表达。

那么角速度与四元数之间的关系是什么呢,我们可以用刚才类似的推法去推一遍,但这个推导可能呃有一些,有些有些有些有些繁琐吧,就是我大概过一遍,就是我还是一样,XW等于呃Q乘以XL乘以Q星对吧。

这是四元数的旋转,然后我两边同时对时间求导,然后因为XL是一个呃固定的向量,所以它求导出来是零,所以只有两项,然后两项后面这一项呢我可以用这个呃,虽然说的这个共轭的这个成绩。

共轭的公式给它变成里面这个样子,然后呢由于XL它是一个纯虚数,所以它的共轭等于它本身,那这样一看的话,我最后等于啊这样一个四元数,减去这样一个四元数的共轭啊,减去它本身的共轭。

然后又因为这个我旋转完了之后,这个矩阵它也是一个啊,这个向量它也是一个呃,这个什么这个四元数它也是一个纯虚数数,所以说我减它,那么结果就是等于两倍的,它对吧,这是一种推法,然后我还可以干什么。

我还可以从这个角速度的方式去理解它,就是这个XW一点,它应该等于一个角速度差差乘上XW,那如果用四元数写的话,可以写成这个四元数乘积的形式,那么你把它展开展开之后,就可以写成后面这个形式对吧。

然后我也可以认为,这个欧米伽是在局部组压系下定义的话,那我只需要把先把这个欧米伽叉乘上XL,在局部坐标系下插重插完,然后再转到这个世界坐标系下,所以这两种推导方法表示都是这个啊XW一点。

那么两种方法等起来,我就可以推导出来,这个自然数求导Q1点和这个角速度的关系,就这个Q1点等于12,欧米伽Q等于二分之1Q欧米加一撇,这个就是把四元数与角速度之间的关系,当然这个推导的话。

大家如果有兴趣的话,可以退,如果没兴趣的话,你可以直接记公式就可以,好吧,那我们今天就基本上把旋转讲到这里,然后这里列了一些参考资料,然后我觉得都是啊讲的很好的一些资料,大家如果有兴趣的话。

可以去翻一翻,包括像这个刘老师的这个games105,应该是games205,人体动画里面也有一张,专门去讲这个线性代数和这个宣传表达对,所以大家如果有兴趣的话,可以去看一下这些资料。

然后我们今天的这个哇这个刚好讲完九点了,刚好讲完,今天这个宣传就讲到这里,大家如果有什么问题的话。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

GAMES001-图形学中的数学 - P5:主成分分析与奇异值分解 - GAMES-Webinar - BV1MF4m1V7e3

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

行那就大家这个那我们就开始啊,首先呢祝大家愚人节快乐是吧哈哈4月1号,这也是节日,然后今天跟大家讲,这个奇异值分解与主成分分析哦,这一块,本来应该是这个线性代数里面的一部分内容。

但是呢就因为因为他这个非常的重要,然后在图形学里面应用也非常的广泛,所以呢就单独把它拿出来做一节课,然后给大家重新推一遍,然后以及看一些他的一些啊性质啊,以及应用之类的一些东西,好吧。

那我们AO那我们研究这个,不管是奇异值分解也好,还是主成分分析也好,其实我们主要研究的是什么问题呢,是研究我们是如何理解一个矩阵,那么通过前面几次课的这个介绍,大家应该也就接触到了很多。

这个用矩阵去表达这些啊,数据结构的例子,比如说一个矩阵可以表达一个三维的,或者是二维的线性变换,然后它还可以单独表示一张图片,也可以表示一些点云的几何数据,你把它组合到一起,它也是一个矩阵对吧。

那么我们如何去理解这些矩阵背后所代表的,这个更深层次的这些含义,啊也就是说它所表示的信息到底是什么,那我们就可以通过今天介绍的这个SBD,以及PC这样的技术,来去分析这个矩阵的一些特性。

那么我们首先介绍这个奇异值分解,也就是singular value decomposition,为了推导这个奇异值分析,我们先从这个实对称矩阵开始来进行分析,那么我们先证明两个两个定理。

第一个定理是实对称矩阵的特征值,它应该是一个实数,这个这个要怎么证明呢,对于任意一个实对称矩阵S,那么它一定存在这个特征值和特征向量,对不对,我们现在这个复述一下来讨论,那么它一定是存在的。

它一定存在一个拉姆达和对应的X,满足SX等于拉姆达X对吧,然后并且我们还做一个规划,就是这个X它乘以它的复转制,它结果应该是一,那么这个X和拉姆达就是一对,特征值和特征向量,它有可能是负数。

那么我们就可以对它求一个共轭对吧,辅呃负向量是可以共轭的,那么这个共轭的结果呢,就是sx store等于拉纳stx st,因为S本身是一个实对称矩阵,所以它的共轭就应该等于它本身对吧。

那么我可以在这个式子左边,同时乘以一个X转置,得到X转置XX等于X转置乘以lambda star x star,然后呢,因为这个拉姆达star是一个常数,所以我们可以把它提出来,提出来的结果。

那就是X转置乘以X到,那么我已经做了这个归一化了,所以它的结果是一,那所以这个结果就应该是lada store对吧,所以我们先对这个上面这个式子进一步共轭,得到这个结果,然后呢。

我们还可以对上面这个式子就对SX等于la s,这个式子求一个转置,得到X转置乘以X等于拉姆达X转置啊,这地方写错了,这地方应该是X转置,可能现在一些啊,啊对这个地方应该是X转置,因为S本身它是对称矩阵。

所以它的转置应该等于他自己对,所以有这个结果,然后呢我可以在这个等式两边,右边两边同时乘以一个X2,乘以一个X的这个共轭,那么可以得到这个X转置乘以sx st,等于后面这个结果,后面这个结果呢。

因为拉姆达本身是实数啊,不一定是实数,而是一个常数,所以我还是可以把拉姆达提出来,然后X转置乘以X2,它又是一,所以这个结果它就等于拉姆达,那么观察这两个结果,就可以发现说我左边其实是一样的。

都是X转置乘以X乘以X的共轭,那么它既可以等于拉姆达的共轭,也可以等于拉姆达,那么于是就可以得到结论,拉姆达其实等于拉姆达共轭,那也就证明了说,如果这个不对称矩阵存在一个特征值的话。

那么这个特征值一定是实数,这是我们的第一个结论,第二个结论是说,只对称矩阵不同特征值的特征向量,应该是相互正交的,这个怎么证明呢,我们可以取两个特征值以及对应的特征向量,就是X0和X1。

然后我可以去从下面这个等式,也是在这个拉姆达0X0转置,右边再乘以X1,那么这个式子左边拉姆达零乘以X0转置,它就可以回到这个实对称矩阵的这个形式,因为它是实对称矩阵的特征值,特征向量可以把X乘回来。

变成X0转置乘以X转置乘以X1,然后呢因为这个S本身是实对称矩阵,所以X转置等于S对吧,那么我就可以变成这个样子,然后X乘以X1,它又可以用特征值的性质给它展开,变成拉姆达一乘以X0转置乘以X1。

所以我又得到了这样一连一连串的等式,然后呢注意这个等式里面X0转置乘以X1,我可以把它提出来,然后呢只剩下这个X拉姆达零和拉姆达一对吧,那么如果拉姆达零和拉姆达一本身是不相等的。

那么一定这个等式成立的话,就一定有这个X0转置乘X等于零,换句话说就是,X0和X1应该是一个相互垂直的关系,也就是相互正交的关系,所以这就是我们证明了啊,这个实对称矩阵的第二个性质。

所以实对称矩阵它的特征值能够保证,一定是实数,并且不同特征值的特征向量一定是相互正交的,那我就可以保证说,任意一个实对称矩阵S,他一定能够写成这个q lambda q转置的形式。

中间这个希腊字母是大写的lambda,也就是写成后面这个矩阵相乘的形式,那么其中呢Q它是一个正交矩阵,满足Q转置乘以Q等于一个单位阵,已经有这样一个结论,这是我从我们刚才那一页PPT的结论得到的。

因为我们证明了说S矩阵所有特征值都是实数,并且呢这个不同泰勒值的特征向量相互正交的,那么S1定有这样的一个分解的形式,这个大家能理解吗,OK那有了这样一个分解形式之后,我们其实就对S这样一个实对称矩阵。

有了更清晰的一个一个了解,中间的这个拉姆达零到拉姆达N减一,这样一个N维的一个对一个对角矩阵,它就它就是S所有的这个特征值,那么整个的分解叫特征值,分解中间这个特征值有正有负。

就是当S当S的秩为R的时候,那么这个lambda里面只有R个非零,然后剩下的全都是零,同时如果拉姆达都是非负数的话,也就是所有的拉姆达大于或等于零的话,那么S就是一个半正定矩阵。

这个为什么叫它半正定矩阵呢,就是你可以干一件事情,就是你去求这个X转置,对于任意一个向量X求X转置乘以SX,这个这个值的大小,我们可以把这个S用这个特征值分解展开,变成Q拉姆达Q转置的形式写成这个样子。

然后呢你就会发现左边其实就是Q转置,X括号起来的转置,然后右边是Q转置乘以X对吧,所以我就可以写成后面这个形式,后面这个形式表达的是Q转置X,他在拉姆达这个内几下它的这个模长的平方。

其实也就是左边这个形式,那么左边这个形式,由于这个拉姆达本身,我能够保证它所有都是拉姆达,零到拉姆达N减一都是非负数,那么这个结果乘出来就一定是一个非负数,所以这是半正定矩阵非常重要的形式。

然后我们可以通过这个实对阵矩阵的特征值分,解把它证明出来,然后同时呢,对半正定矩阵我们还可以继续往下变形,就是中间的这个啊使对角矩阵LADA,我可以,把它写成一个sigma的平方的形式。

然后这个西格玛也是一个对角矩阵,然后它的取法非常简单,也就是西格玛零等于根号拉姆达零,西格玛N等于西格玛N减一,等于拉姆达根号拉姆达N减一,就这么一个对角矩阵,把这个拉姆达矩阵的每个对角项。

都给大家开根号得到sigma,那么一定有sigma的平方等于拉姆达,写成这个样子之后呢,那我们就可以对于S这个矩阵,实对称矩阵的特征值分解给它进一步开,给它写成这个two sigma的平方Q转置的形式。

然后写成这个样子之后呢,我还可以进一步在这个西格玛平方中间,给它插上一个Q转置乘以Q,因为我保证了这个Q矩阵是一个正交矩阵,那么Q转置乘以Q就是一个单位置,所以乘进去是不影响它的结果的。

乘进去之后你会发现Q西格玛Q转置这个矩阵,我把它定义成P的话,那么一定就有关系,这个S其实它直接可以等于P的平方对吧,所以这个P呢,它其实就是一个,类似于这个实对称矩阵的平方根的一个矩阵。

我们可以对任意一个实对称矩阵,如果它是半正定矩阵,也就是它的所有的特征值都是非负的话,那我们就可以定义这样一个P,这个P呢同样也是一个实对称矩阵,对吧,可以定义一个实对称矩阵,P满足P的平方等于X。

这是关于谁对称半正定矩阵的,另外一个非常有用的一个性质,然后同时呢,我们还可以去计算这个实对称矩阵的,它的trace trace是什么,Trace,就是把所有的这个对角线的元素给它加起来,对吧。

那S的trace等于Q乘以拉姆达,乘以Q转置的trace,然后这个trace计算又有一个非常有用的性质,就是trace ab等于trace ba对吧,这个大家如果学习线性代数的话,应该知道。

那我就可以把这个Q转置给它,移到左边来,变成求trace,Q转置乘以q lambda,然后Q转置Q呢就是单位阵,所以它就等于trace on a trace,拉姆达的话,由于拉姆达是单位阵。

所以trace拉姆达,也就等于所有的这个拉姆达的求和,那换言之,就这个实对称矩阵,它的G也就是它的trace,其实是等于它的所有特征值来进行一个求和,这就是关于实对称矩阵的一些性质,然后这个推导呢。

大家如果就是之前学习过线性代数,就是线性代数,是作为我们这门课的一个基础课程,就是大家如果呃,觉得看这些推导还是比较吃力的话,那么还是建议大家先回去,就是啊学一下这个线性代数对吧,然后因为线性代数。

毕竟还是一个非常基础的一个东西,就是呃它是很多东西的一个基石嘛,包括我们今天讲的这个啊,很多东西,OK吗,那关于实对称矩阵呢,我就讲到这里,就是借着它的性质,就以及它的推导,就大概提到这个地方。

然后有了这个基础之后,我们接下来就可以推到这个啊,这个奇异值分解,SVD分解,那么奇异值分解怎么导出来的呢,首先我们考虑一个任意的矩阵,A它是一个M乘以N的矩阵,它不一定是一个方阵。

然后它的质呢我认为是R就是给定的秩是R,然后我可以干一个操作,就是我去求这个A的转置乘以A把它定义成S,那么这个S矩阵它一定是一个对称的,半正定矩阵,这个是为什么呢,因为我可以。

因为我可以我可以求一下任意一个向量X哎,对任意的一个向量X求XXX转置,X转置乘以X乘以X,他应该就等于X啊,这个这个笔用的不是很熟练啊,不好意思,X转置乘以X再乘以X,它应该等于X转置乘以A。

转置乘以A乘以X对吧,那这个东西它应该就是ax的模长的平方,那么它一定是大于等于零,所以呢对于这样一个A转置乘以A的一个形式,它一定是一个对称的半正定矩阵,那已知它是对称半径力之后呢。

我就可以去利用我们之前的这个知识,去找到它的一组R个正交基,一组R个正交向量是它的这个特征向量,因为S本身是对称的,并且它是半正定的,那我一定可以找到这一组V和拉姆达,然后满足第一是他的特征值为。

拉姆达的特征向量,然后并且呢这个V它是相互正交的,OK那么有了这样一组V之后,我们可以把这个给他写开对吧,写开成A转置乘以A乘以vi,等于LDAIA乘以vi,然后呢同样的我们去看这个啊。

不是我们在这个这个结果前面这个结果上,左边再给它乘以一个vi转置,然后看这个结果,vi转置乘以A转置乘以A乘以VJ,那么根据刚才这个特征值的关系,我可以把这个后面这个东西写成,拉姆达J乘以VJ。

然后vi和VJ之间因为它是相互正交的,所以他就应该等于德尔塔IJ,所以他最后结果等于拉姆达J横一点开IG,那为什么要推这个东西呢,对这个形式推完之后,我们可以重新定义一个向量U,它满足这样的关系。

UI等于根号拉姆达I分之一乘以A再乘以VI,我们定义这样一组向量UI,那么根据上面推的这个关系,我们就一定有这个UI转置乘以U,J等于德尔塔IJ,对吧,就是利用上面导出来的这个关系。

那么换句话说从这个结果来看的话,UI本身它也构成了一组二个正交集,所以UI是一组正交基,然后vi也是一组正交基,并且UI和vi之间满足这样的关系,这个是由这个A转置A,这个矩阵是一个对称半正定矩阵。

然后利用我们上一页PPT的东西导出来的,那有了UI和vi之后呢,我们就可以使用这个史密斯正交化,把VI扩充成为这个RN空间的N个正交集,因为本身这个A矩阵它是一个值为R的矩阵,所以我只能定义R个vi。

然后我可以通过,但是我可以通过正交化,把这个vi扩扩充成为RN的N个正交集,然后同时呢,也可以把这个UI扩充成RM中的M个正交集,就通过这个史密斯正交化得到,那么扩充的积呢,首先它满足扩充了之后。

跟这个比如说vi扩充之后呢,他跟之前的这些向量都依然是正交的,同时UI扩充之后呢,跟之前项也都是相互正交的,并且呢我们之前R个向量满足了这个关系,同样对于扩充的向量也是满足的,为什么满足呢。

因为对于扩充的向量而言,这个它的对应的这个拉姆达J1定是零,对吧,因为因为我的质只有R,那我扩充值扩,那我除了这前R的特征值是大于零的之外,其他的应该全是零,所以这个LJ应该是零,所以左边应该等于零。

然后右边的A乘以VJ一样的,因为VJ是你扩充出来的,所以它结果也是零,OK吧,所以通过这个零,我可以认为这个根号拉姆达JUJ等于AVJ,然后你把这个关系和这个关系联系在一起看,发现他们俩其实是一个关系。

我把这个式子的,把这个UI定义式的根号兰姆达I乘到左边来,变成根号兰姆达IUI等于AVI,他就满足这样的关系对吧,那么这个关系我可以把UI和vi都给他,写成矩阵形式,就是定义两个矩阵。

一个V1个UV的每一列就是VIU的,每一列就是UI,那么上面这个关系就可以写成这样的矩阵形式,A乘以B等于U乘以西格玛,sigma一样的是一个对角矩阵,它的每一个对角圆就是这个根号拉姆达J。

所以这个av等于U西格玛,就是这个这个关系以及这个关系的一个,矩阵形式,那么到这里,我们离最终的这个SBD就只差一步之遥了,我们只需要把这个V矩阵给它乘一个转置,放到等号右边来。

就可以得到这样A的分解关系,A等于U西格玛B转置,其中呢U和V是两个正交矩阵,西格玛是一个对角矩阵,然后呢,其实我们刚才其实没有,假设这个A矩阵它是一个方阵,对不对。

我们只是说它是一个任意的M乘以N的矩阵,那么自然呢刚才在推的时候,这个U呢我是把它扩充成这个RM的基,所以一共是M个向量,所以它应该是一个M乘以M的矩阵,然后V呢是把它扩充成RN的G。

它一共是N乘以N的一个大小,那么中间的这个对角矩阵西格玛,其实它也并不是一个方阵,它是一个M乘以N的矩阵,但这不妨碍我去定义定义它的这个对角圆,就是它的对角圆,我还是他的第I行,第I列。

那么它的对角圆就是这个根号拉姆达I,也就是这个我们称之为A矩阵的奇异值,Single value,然后由于A矩阵本身它的秩是R,所以我只能找到R个不为零的这个奇异值,根号拉姆达I。

其他的所有对角元以及非非对角元都是零,这个就是任意矩阵的一个奇异值分解,如果这个推导,前面大家觉得呃就是还是太跳跃的话,就是还是推荐大家就是去系统的学习一下,这个线性代数的知识,然后呢我们今天其实是呃。

就是如果在大家真的不理解,前面的这些推导的话,也没有关系,只要理解这个形式就可以了,这个形式对于线性代数非常重要,因为它非常的朴实对吧,我是一个任意的一个矩阵,A1个不是方阵的都可以的一个矩阵。

并且也不一定是满质的,他都可以写成这样一个U,西格玛乘以V转置的形式,其中V和呃,U和V是两个正交矩阵,然后西格玛是一个类似于对角矩阵的,一个一个矩阵,这个就是一般矩阵A的奇异值分解。

如果大家实在不理解的话,就可以先我们先把这个形式记住,然后呢我们再看一下这个形式,它对于呃我们后续计算呢有哪些帮助,那么奇异值分解是线性代数中,非常重要的一个概念,它在图形学中的应用也是非常广泛的。

如果我们已经知道这个矩阵的任意一个,矩阵的奇异值分解,那我们就可以由这个奇异值分解的形式去推,这个矩阵的逆是什么,矩阵的秩是多少,以及这个矩阵的它的最小二乘,矩阵方程对应的最小二乘解是什么。

以及包括其他的分解,比如说极分解,它都可以通过这个极值分解得到的红R,以及还有很多很多的这个应用,那我们先看一个例子,比如说矩阵的逆与这个矩阵的极值分解,之间的关系,我们先假设一个可逆矩阵。

也就是一个满志的一个方阵A,然后去得到它的极值分解,A等于U西格玛比转置,那么通过这个形式我就可以推到这个A的逆,他应该写成什么样子,A的逆就应该等于U西格玛V转置,括号起来再加个逆。

然后这个利用这个括号的矩阵相乘的一个,need的展开式把它展开,那就可以展开成后面这个样子,然后又因为这个V矩阵和U矩阵是两个方阵,所以V转置的逆就应该是VU转U的力,就应该是U转至。

所以我就直接写到后面这个样子,然后sigma本身它又是一个单位矩阵,它不是单位,它是一个对角矩阵,那么这个对角矩阵的逆,也就是把它的这个对角线上的元素都给大家,求一个相反数。

它依然是一个对角矩阵放在中间,所以如果我已知A的SD分解的话,我是可以立马写出A的矩阵的逆,它的形式应该长成什么样子,这个样子你也可以把它理解成是这个AE,这个矩阵的,它的SVD分解的形式。

所以一旦你知道这个矩阵的奇异值分解,你自然就可以知道这个矩阵的逆,但是呢我们刚才说了,SVD它不只适用于A矩阵,是一个满志的方阵的情况,它是适用于A是任意的矩阵的情况,那比如说我们可以先这样假设。

我们假设A是一个列满秩的矩阵,但是呢它的行数是比列数要大的,也就是说它是一个长得像一个很长的,这样一个矩阵,那么如果我要去求解ax等于B的这个情况,那么这样一个矩阵方程。

它就是一个我们称之为超定的矩阵方程,因为我的未知数的个数就是X的,尾数就是N,但是我的方程个数呢是A的这个函数,也就是B的行数,它应该是M,但是我们刚才说了,行数大于列数的M要大于N的,所以A矩阵的呃。

AAX等于B这个矩阵方程,它的方程个数是要大于自由度个数的,那么意味着解其实它不一定存在的,那么这就是一个超定情况,那么为了求解这样一个超定的矩阵方程,首先它的解是不一定存在的。

那我可以取而代之去求一个什么呢,求一个最小二乘意义上的解,也就是求解这个一个X使得ax减B,这个我们称之为残差的东西,它的模长是最小的,比如说对于超定情况,它的真实解,它的严格解是不一定存在的。

但是我可以转而求其次去求一个X,使它满足这样的一个残差最小的情况,那么也可以认为这个X这个渠道最小的,这个X就是我想要的一个最好的解,那么这样一个X要怎么得到呢,我们需要求解这样的优化方程。

那么为了把这个问题理解的更清楚一点,我们可以利用这个SBD分解来看这件事情,我们把A通过SBD分解写开,那么X等于B就可以写成后面这个样子,然后写成后面这个样子之后呢,我可以统一的把U提出来。

然后后面这个B他前面其实什么都没有对吧,我可以假设它前面乘一个单位矩阵,然后因为U本身是一个正定额,是一个正交矩阵,那么也就可以写成这个U乘以U转置的形式,所以他应该是等于后面这个结果对吧。

U乘以U转置乘进去,它就是个单位,所以左边等于右边,那么我注意到一个结果,这个U本身是因为它是一个正定矩阵,它是一个正交矩阵,那么其实它是不会改变这个向量的模长的,对吧。

所以呢这个AX减B这个残差的平方,它其实就等于这个括号里面的,这个结果的残差的平方,那如果我进一步假定,我令X1撇等于V转置乘以X,B1撇等于U转置乘以B,我定义两个新的向量,那么就右边这个这个关系。

X等于B这个方程的残差的平方,它应该等于西格玛X1撇减B1撇的平方,那么通过这种方式,我就可以把原来的一个X等于B的问题,转换成右边的这样一个矩阵方程的问题,然后这个矩阵方程它有一个特别好的点。

就是这个西格玛矩阵现在是一个对角矩阵,它是一个非常好研究的东西,对吧,那我们就看一下,我们要问什么样的X,使得上面这个优化方程最小,那也就是问我们有什么样的X1撇的,后面这个结果最小,那什么样的X1撇。

会使西格玛X1撇减去B的模长的平方最小呢,你可以把西格玛乘以X1撇成塞,打开这个后面这个形式对吧,因为这个西格玛矩阵我们刚才说了啊,A矩阵它是一个列满秩的矩阵,所以它应该有N个不为零的。

这个特征是N个不为零的奇异值,然后以及剩下的应该全都是零,所以这个西格玛乘以X1撇,应该可以写成后面这个样子,写成四杠零乘以X01撇,这是第一项,一直到后面前面N项不为零的,然后后面所有项都是零。

那么自然如果你想让这个SIGMX1撇,减去B1撇,他这个残差的平方取到最小,那我就应该有关系,前面这N项应该对应的就是B的这N项,B的前N项,然后N项因为全是零,所以我不管怎么改变XC撇。

我都改变不了他是零的事实,那我就不管它了对吧,所以我只需要管前面的这N个方程,肯定是满足的,那么前面这N个方程满足,我就可以把X1撇写出来,可以写成X1撇,等于西格玛heat逆乘以B1撇。

为什么是西格玛height逆呢,因为这个啊西格玛矩阵,它本身不是一个方阵对吧,然后呢我的X1撇和B撇满足这个关系,这个关系我通过这样一个类似于西格玛矩阵,逆矩阵的一个矩阵,把它写成矩阵相乘的形式。

那么这个西格玛height逆这个矩阵它怎么定义呢,就是它是一个它的大小是这个sigma矩阵的转置,sigma矩阵本身是M乘以N的矩阵,那么sigma hat knee这个矩阵,它就是一个N乘M的矩阵。

然后同时呢,它的对角线对应的是原来sigma矩阵,对角线的一个导数,那么我定义了这样一个seek height,逆之后,把它乘以B1撇,得到了这个X1撇,也就是满足上面方程的X1撇,你只要把它的分量。

每一个每一个每一行写出来看一下,你就会发现它是满足跟上面那个形式等价的,所以我们定义了这个西格玛hit me之后呢,只是把上面这个形式,写成一个更好看的矩阵形式,OK那写成这个矩阵形式之后呢。

X1撇和B1撇在上一页PPT里定义了,它,分别是这个啊V转置乘以X和U转置乘以B,那我就给它乘回来,也可以得到最后的这个X的形式,X等于V乘以西格玛,HT e乘以UT乘以B对吧。

那这样又回到了一个X等于一个什么矩阵,乘以B的形式,本来我要求解ax等于B,如果这个A是一个可逆矩阵的话,那X自然应该等于A的逆乘以B对吧,然后我现在由于A本身不是一个方阵。

这个方程对应的方程是一个超定的方程,但是我通过最小,如果我假定我的解是满足最小,二乘以下的解的话,X依然可以写成这样一个矩阵相乘的形式,那么就可以把中间的这个矩阵呢,把它叫成原来矩阵A的一个尾逆。

就是他是一个假的逆,我们定义的这样一个形式,那么通过刚才的分析,我可以我们就可以说说,如果你X取到这样一个值的话,他是能够满足ax减去B它的模长是最小的,也就是原来ax等于B。

这个矩阵方程的残差是最小的,那另外呢我们也可以从另外一个思路去看,这个问题,就是在前面的课程中,星语给大家介绍这个矩阵求导相关的知识对吧,那么要优化这个X减去B模长的平方,这样一个目标。

我们也可以直接从矩阵求导的思路进行推导,也就是我定义这样一个优化目标是G,然后把它写开,就是后面这个结果,然后呢我去看X取到什么值的时候,能够满足这个G对X的导数等于零嗯,因为我本身这个函数是这个目标。

是关于X1个二次函数对吧,那么它取到零的时候,一定是他取到最值的时候,那什么时候才取到零呢,我就可以对G对X求偏导,然后这个偏导的求法就是啊,之前应该介绍过前面这一项。

X转置乘以A转置乘以A乘以X这一项,他的这个呃导数就是两倍的,A转置乘以A乘以X,然后后面这两项的导数,就是这一项是A转置乘以B,这项也是A转置乘以B,所以最后结果是减去二倍的A转置乘以B。

所以如果X取到最值的时候,它应该满足G对X的偏导数等于零,那么这个形式我就可以把它变成一个新的矩阵,方程,变成这个A转置乘以A,X等于A转置乘以B变成另外一个啊,另外一个矩阵方程的形式,那么这个时候呢。

A转置乘以A这个矩阵A是一个很长的向量,A转置它就是一个很扁的向量,A转置乘以A呢,它又回到了一个N乘N的矩阵,然后并且呢由于A矩阵是这个啊,是一个列满秩的矩阵,所以A转置乘以A呢,它是一个满秩的矩阵。

那么有了这个关系之后,我就可以直接对吧,求它的逆得到X等于A转置乘以A的逆乘,以A转置乘以B,对吧,我也可以通过矩阵求导直接导出来,说你X取到这个值的时候,它是满足这个残差最小的。

那么这个结果我们称之为A矩阵的左逆,为什么这么叫呢,因为你把这个中间的这个矩阵,存到A矩阵的左边,你就会发现它其实是一个单位证,是一个A转置A的逆乘,以A转置A的形式,所以它是单位阵。

但是呢你把这个矩阵乘以A到右边,A乘以A转置A整体的逆再乘以A转置,它就不知道是什么结果了,那就不一定是一个单位,所以你既然只能乘在A的左边,让它等于单位阵,那我就叫你A矩阵的左逆。

那么我们从两条思路都导出来,一个残差最小的X的结果,那么这两个结果是不是等价的,这是证明它们是等价的,怎么推呢,我直接看这个索尼,把A的SVD带SBD分解给他带进去,求这个A转置A的,它的逆是多少。

你看A转置A然后带进去就可以得到这个啊,变成这个V乘以西格玛,转置乘以西格玛乘以VT,然后呢西格玛转置乘以西格玛,两个对角矩阵相乘,我可以啊,两个类似于对角矩阵的一个矩阵乘起来。

我就可以变成一个真正的对角矩阵,变成一个拉姆矩阵,sigma本身是一个M乘以N的矩阵,那个拉姆达矩阵就是一个N乘N的矩阵,同时它的对角元素,第二个对角元素就是这个原来A矩阵的奇异值,第I个奇异值的平方。

西格玛I的平方,我可以定义这样一个拉姆达,那么A转置A的逆再乘以A转置呢,把一样带进去就可以变成这个V乘以london nee,再乘以sigma,转置乘以UT,然后这个拉姆达nee乘以sigma转置呢。

它是什么东西,拉姆达nee它是一个对角矩阵,那我就把它的对角线,每个元素给他求一个导数,然后左乘上这个sigma转置对吧,sigma转置对角元素还是西格玛,零到sea sigma n减一。

然后如果给它乘以一个对应的这个啊,奇异值的平方的导数的话,那它自然得到的结果就是西格玛分之一对吧,然后并且呢它的这个矩阵的这个形状,应该就是CMA转置的形状,它是一个N乘M的矩阵对吧。

那这样通过这样的方式,我就已经证明了,说中间这个矩阵它确实就是我们刚才定义的,Sigma hat ne,在我们刚才推了两个逆,一个是矩阵的左逆,以一个矩阵的尾逆,这两个逆结果是一样的,那换句话说。

就是如果这个矩阵是一个列满秩的矩阵的话,它的左翼和尾翼其实是一个东西,这是第一种情况,那还有另外一种情况是什么,就是这个A矩阵它是一个很扁的矩阵,它是一个行万支的矩阵,但是呢它的列数要比行数更多。

M小于N,那我去求解X等于B这样的一个矩阵呢,它就是一个确定的矩阵,也就是说它的方程的个数是A的,行数是M是要比未知数的个数,X的尾数N要小的,那我就有无穷多个X去满足X等于B,它是一个限定的矩阵方程。

那么同样的我可以在最小二乘的意义下去呃,去假定他的几这个最小二乘,那就不是让它的残差最小,因为它的残差是能取到零的,于是我们就可以转而让xx的模长是最小的,那就可以变成下面这样的一个,带约束的优化问题。

就是我在所有的满足AX减去B等于零,这样的呃X里面,挑一个X模长最小的一个结果,对吧,这是一个对应的一个最小二乘的结果,那么对于这样的结果,我同样的可以通过这个SVE分解。

去看一看它里面到底是发生了什么,对吧,我要我要求X等于B,也就是U西格玛V转置X等于B,那么做跟刚才一样的这个变量替换X1撇,把它定义成V1转置乘以X,B1撇定义成U转置乘以B。

那么这个U西格玛V转置X等于B,也就是等于U乘以U转至B,它就等于西格玛X1撇等于B1撇对,建成这样一个矩阵矩阵方程,那同样的这里的好处就是西格玛矩阵,现在它是一个对角矩阵,那么为了让他满足这个啊。

西格玛X1撇等于B撇的要求,那么自然所有的X1撇它要满足要求,每一行矩阵你可以单独拿出来,西格玛零乘以X01撇,它应该等于B01撇,然后一直到西格玛N减一乘以X减一撇,等于BM减一撇,一共M个方程。

这个方程满足,然后剩下的N减M个方程,也就是这个C矩阵后面全零的部分,对应的这个X1撇的这些值,就是从M到N加一的,M到N减一的N减M的值呢,它是可以任意取的对吧,因为我希望后面是一个纯零的矩阵。

那么我为了让这个X1X的模长最小再多一步,就是这个X的模长,它其实是等于X1撇的模长,为什么,因为V矩阵是一个正交矩阵,对吧,所以X1撇的模长它等于X转置乘以V,V转置乘以X就等于X转置乘以X。

也就是X的模长,所以如果我想让X的模长最小,也就是让X1撇的模长最小,那X1撇的什么模长最小呢,那自然是把后面这所有的值都给它取成零,这个时候X1撇的模长是最小的。

那么这个时候我可以类似的去写出这样一个,X1撇和B撇的关系,X1撇等于西格玛heat逆乘以B1撇,然后这个西格玛height逆它是这样一个矩阵,它的上半部分是一个N乘N的呀,一个一个多少。

一个M乘M的一个对角矩阵,然后对角元素是对应特征值的导数,而不是对应奇异值的导数,然后本身的这个西格玛hat逆矩阵呢,它的形状是跟sigma转置的形状是一样的,从原来扁的矩阵变成一个行的矩阵,对吧。

那你这样写成这样一个矩阵形式的话,就可以对应它的前N项是满足这个方程的,然后同时它的错误N减M项是零,这个时候呢,我能保证它的S1撇的模长是最小的,那么对应的X模长也就是最小的。

那就满足我方才刚才定义的这个优化问题,那么一样的,我把X1撇和B撇带回去,就可以得到X和B的一个关系,那么中间的这个矩阵呢一样的,它就是我们刚才定义的这个矩阵的伪逆形式,是一样的。

所以尽管我们刚才定义了一个完全不同的一个,呃优化问题,一个最小二乘的问题,但是我们发现这个X他最后的这个解的形式,依然是一个矩阵的伪逆乘,以B矩阵的形式要乘以B向量的形式。

那么呃我们刚才用了两种推导方法对吧,一种是通过SBD的方式得到矩阵的威力,还有一种是直接求这个优化问题,得到矩阵的阻力,那么在这个地方呢,如果你想直接去求解,这样的一个带约束的优化问题。

因为我要让这个X等于B,这是一个约束,求解这样一个带约束的优化问题的话,我们需要使用拉格朗日橙色,这个东西其实是优化里面非常重要的一个概念,我们会放到后面来讲,所以今天就呃我在这里给大家推。

就是你如何从直接从这个自由化的这个形式,导出来,这个X应该等于什么,我们就直接从这个矩阵的伪逆的形式去定义,矩阵的右翼怎么定义呢,其实也类似,就这个sigma heart nee这个形式。

我可以把它展开写成后面这个形式对吧,sigma转置,它是一个点的向量啊,它是一个长的向量,然后呢西格玛乘以sigma转置,西格玛本身是一个扁的向量,sigma乘以西格玛转置呢,它就会变成一个M乘N的。

M乘M的一个对角矩阵对吧,然后把它求逆,然后再乘以到sigma转置上,那我就应该得到这样一个长向量,然后长的矩阵,然后并且这个矩阵的对角元素是对应的,这个起义值的导数。

所以sigma如果满足这样的一个形式的话,那我们再去看这个啊V乘以西格玛,heat逆,再乘以U转置的这个形式呢,它就可以等于后面这个A的形式,这个推导过程就是你把我们上一页关于这个。

我们之前关于这个矩阵左翼的那个推导,把它倒过来,如果你sigma有这样一个关系的话,那A矩阵就会有这样一个关系,那么这样一个关系,这个这个形式把它定义成矩阵的右翼,它跟左逆是不一样的,为什么呢。

因为这个逆矩阵你把它乘在A矩阵的右边,能够保证乘出来的结果是一个单位矩阵,但是呢如果你把这个矩阵乘到A的矩阵的左边,它其实不能保证它是个单位,所以A转置乘以A乘以A转置的逆矩阵的形式,称为矩阵的右翼。

那么通过两个这个矩阵方程,其实定义了三个矩阵的三个逆,左逆右逆和伟力左逆,当矩阵这个就是列满秩的时候,左逆是一定存在的,那么左逆的形式是用来求解这个超定方程的,也就是你的方程个数。

比自由度的个数是要多的情况,如果矩阵是行慢支的,那么它的右翼一定存在,这个东西是用来求解这个欠定方程的,也就是你方程的个数比自由的个数要少,这是两个特殊情况,然后在不管在什么情况下。

这个A矩阵它甚至是一个不满值的矩阵都可以,它的尾翼是一定存在的,这个尾逆的定义方法,就是通过这个西格玛heat逆矩阵的这个形式,对吧,就是它的大小是西格玛矩阵的转置,然后它的对角线是西格玛本来的对角线。

给他求个导数,所以不管什么情况下,矩阵的伪逆是一定存在的,然后如果你的矩阵是列满制的话,尾逆等于左逆,然后矩阵是行满值的话,尾逆等于右逆,然后如果矩阵是满秩的话,这个尾翼它就是一个真正的力。

那么矩阵是一个方阵,是一个可逆矩阵的话,那么这个尾翼就是一个真正的力量,所以通过这个啊特征值分解,我们就可以获取关于这个矩阵A,任意的一个矩阵A,它求解矩阵方程,以及A矩阵本身的逆的很多的信息。

对这些信息对于我们理解这个问题,就是非常直观的一个理解,OK到这里大家有问题吧,大家有问题可以现在问,特征值的个数不超过质吗啊特征值的个数啊,首先这个东西叫奇异值,奇异值的个数等于矩阵的这个日。

就是你如果置为R的话,那么其实就是呃就是有R个,也就是说这个对角线上,对角线上它除了前二个值是有值的,不管是正啊,有正值,对西格玛是一定是正的,因为它是根号定义出来的,所以它一定是正的。

然后剩下的这些值就是零了,OK那看来没有问题,那我就继续了,OK我们刚才呃,刚才介绍的是这个SVD分解,与矩阵逆之间的关系,我们现在看一些关呃,跟图形学有关的一些东西是吧。

比如说我们可以通过SVD去理解一个几何变换,对于一个任意的一个线性变换,X1撇等于ax,我都可以把A矩阵A是一个33的矩阵对吧,它是一个线性变化,它是3×3的矩阵,把它写成这个特征值分解的形式。

写成这个奇异值分解的形式,由西格玛V转置乘以X,那么这样的三个矩阵相乘,再乘以X减X的形式呢,它其实就是做了三次的这个线性变换,对三次独立的线性变换,第一次是这个V转置乘以X,那么它对应的是什么。

是一个应该是一个旋转,因为V本身是一个正交矩阵对吧,然后呢XE然后你再乘以西格玛,那它就对应一个拉伸操作,然后再乘以一个U呢,它又会变成又是一个旋转,所以一个线性变换其实我可以通过SVD分解。

把它理解成两步旋转,加上一个拉伸,但是这个地方注意一个地方,就是呃我们在旋转变换的时候,介绍说所有的旋转矩阵,它其实以呃正交矩阵的要求要严格对吧,它除了是正交矩阵的要求之外。

还要求这个矩阵的行列式是正一,而不是一,所以呢为了就是如果你要做这个啊,这个几何变换的分解的话,你可以去调整这个sigma这个中间这个对角矩阵,这个拉伸矩阵的正负号,它某个元素的正负号。

来去调这个两个正交矩阵的它的行列式,然后调到让这个啊就是把它这个加一个负号,或者去加一个负号,对某某一行加一个负号各种形式,然后去调这个V矩阵的行列式,然后把它的行列式调成正一。

就能保证这个V矩阵它就里面不会有反射,这个反射最后反应到这个中间的拉伸上对吧,对于任意一个线性变换A来说,它其实是有可能包含这个反射,这个拉伸上来,所以啊有了SPD之后,其实对于一个任意的线性变换的话。

你也可以用这样的方式去理解它,就是它一定是包含了旋转和拉伸的,那么除了这个SP分解之外,我们其实还有另外一种直观的理解,这个啊这个变化的一个形式,那就是通过积分解。

polarity composition来看这个事情,对于任意的一个十方阵A,那么它的积分解定义成为A等于R乘以S,R是一个正交矩阵,然后S是一个半正定矩阵,然后通过SVE的角度。

我们其实也可以看到这个几分解是怎么出来的,其实非常直接,就是A等于U西格玛V转置,我只需要在中间乘以一个V转置乘以V,在U和CMA中间插一个V转置乘以V,因为V本身是一个正交矩阵。

所以它差乘出来这个结果是一个单位矩阵,那么走它插进去之后呢,前面这个部分U乘以V转置,是两个正交矩阵的几,那么它结果依然是一个正交矩阵啊,后面V乘以西格玛V转置,它就对应着一个半正定矩阵。

因为中间的这个西格玛,它一定是一个非负数对吧,然后同时这个矩阵是一个对称的矩阵,对吧,所以如果你已经有了SD分解,其实你可以非常方便的得到这个几分解,就是把U乘以V转至对应的就是它的旋转。

然后后面这个V乘以西格玛V转置,就是它的这个半正定矩阵S,然后同时呢你也可以换一个插法,就是在这个sigma和V转置,中间插一个U乘以U转置,然后把它写成后面这个形式,后面这个形式的话。

它就会变成前面是一个半正定矩阵,然后后面是一个正交矩阵对吧,所以但他的这个啊这个形式,这个旋转矩阵的正交矩阵的形式是没有变的,都是U乘以BT,OK那把它拆成这个样子之后呢,他其实对应着一个啊。

也是对应着这个三维的三维的变换,首先这个U乘以V转置呢一样的,因为你是正交矩阵,所以它对应着一个旋转,然后这个U西格玛U转置这个矩阵,或者是V西格玛V转置这个矩阵,它其实干点什么事呢。

它是你先把它转一个角度,然后拉伸一下再给他转回来对吧,因为你是你第一次旋转是UT,然后第二次旋转是U嘛,所以两次旋转其实是抵消的,所以做到最后呢,其实你是把它沿着某个不是啊,呃不一定与这个坐标轴对齐的。

那个方向沿着某一个方向把它拉伸了一下,所以一个半正定矩阵,其实对应的就是一个任意的一个拉伸,所以呢这个几分解用积分解去看,这个任意的线性变换的话,那么它对应的就是直接把他这个线性变换。

分解成两步一步旋转,一步拉伸,然后两种啊这个R乘以S或者是S乘以R,他们的这个呃两种分解的顺序都可以,然后他们对应的这个旋转矩阵是一样一样的,都是U乘以BT但是这个拉伸矩阵是不一样的。

从这个结果也可以看,大家也可以看到,我可以先旋转,然后拉伸,也可以先拉伸,然后旋转,那么这个积分解或者SVD分解,在图形学中有一个非常重要的应用,叫这个shape matching,形状匹配。

它形状匹配其实是一个算法,这个算法是干什么事呢,就是说如果我有一个任意的一个形变,Q到P,也就是说把这个模型上的一个任意点的Q,映射到了点P有这样一个变化,那么我应该如何去找到一个刚性的变换。

也就是一个旋转加上平移,对应的一个旋转矩阵R以及一个平行向量T,在这个刚性变换下,能够让这个模型,它跟我最终的这个任意的一个形变,尽可能的接近,这个算法就解决的是这样一个问题,就是我有任意的一个形变。

它里面可能有旋转,可能有拉伸,甚至可能有这个啊非线性的变化,但是我如何通过一个呃刚性的变化,一个旋转加上平移去变化点Q,让它尽可能的接近我最后的结果,P这样一个问题,他其实是跟这个SBD跟奇异值分解。

是非常相关的一个问题,那我们就下面来看一下这样一个问题,需要如何去求解它,那么对于这样一个问题呢,我们首先假设R是给定的,因为我最终是要同时优化R和T,那我就先假定R是已知的。

那么我现在只看TT什么时候,什么样的T会使得这个结果是最小的,那我们就可以对这个目标函数对T求导对吧,求导求出来就是后面这样一个一个向量对吧,这个就是一个简单的一个向量,向量的平方的一个求导。

求出来后面这样一个向量,然后呢等于零,然后可以把这个求和给大家写进去对吧,R是一个常数,所以可以提出来,然后呢T1共有N个点,所以T求和就是NT然后P呢,所以求和就是西格玛PI,所以T满足这样一个关系。

N乘以T等于pi的求和,减去减去这个R乘以QI的求和,那么我可以定义两个两个量,就是分别是这个形变前和形变后的这个质心,也就是把这个所有的PI给它加起来,然后除以N作为这个形变后的质心。

然后所以所有的QI加起来,除以N变成作为这个形变前的执行,定义两个量QC和PC,那么这个T就可以自动写为,T等于PC减去R乘以QC,这个结果说明的就是说,如果我的R已知的话,那么T直接取到这个值。

它就能够满足这个呃,目标函数是最小的,那么我就可以把这样的一个T给他带进去,我刚才的这个目标函数,把T的这个结果我带进去,那变成后面这个结果,后面这个结果呢,它就是只是跟R相关的一个结果。

它跟T就没有关系了,但是T已经被我约掉了,然后呢我再定义两个量,就是pi1撇,QI1撇,分别对应的是这个点P这地方少打一个I啊,pi减PC也就是点pi相对于G的呃质心的偏移。

然后QI1撇呢就是QI相对于质心的偏移,定义两个偏移量,那么R它对应的优化问题,就会变成下面这样一个优化问题,它就跟T没有关系,我们接下来的任务就是,怎么样去求解这样一个最优化问题。

那么求解这样一个最优化问题呢,我们把它展开来看,这样一个呃乘平方求和的形式,这个平方展开出来里面会有四项,然后这四项有两项是跟R没有关系的,第一项是这个pi1撇乘以PI1撇,转置乘以PI1撇。

这个东西它是我形变后的,这个我给定的形变后的这个点P,它的点pi的内积,那这个东西它是跟R没有关系的,然后最后一项它里面有一个R转置乘以R,由于R1定是一个正交矩阵,所以R转置乘以R呢一定是个单位阵。

所以后面最后这一项其实也跟呃,也跟这个选举人偶尔没有关系,然后跟R最有关系的是中间两项,然后中间两项呢其实都是什么,都是PI1撇和R乘以PI1撇的内积,对pi1撇转制成RQI1撇。

然后RQI1撇乘积的转置乘以PI1撇,都是这两个向量的内积,那么我为了让这个最后的目标函数最小,也就是让这个内几,然后求和它的结果是最大,所以转换成后面这个形式,然后后面这个形式呢我可以进一步做变换。

把它写成一个更好看的形式,怎么变化呢,就是把这个这个东西把它写成一个矩阵,trace的形式,然后注意到前面这个这一项,PI1撇,转置乘以R乘以PI1撇,这个东西它是一个标量对吧,那么一个标量。

我自然是可以把它写成trace的形式,因为一个标量的G就是这个标量本身,那为什么要把它写成trace的形式呢,是因为这个时候里面这个结果,因为我计算的是它的G,我就可以利用几G的这个运算性质。

A乘以B的G应该等于B乘以A的G,所以我就可以把这个GI1撇,转置这个东西乘到最后,然后同时宁愿华是一个一个长长长长线长矩阵,所以把R提到这个求和的外面来,最后变成R乘以啊,后面这个求和的形式,对吧。

这个求和形式他现在就跟R1点关系没有了,那我同样可以定义一个常数的矩阵,定义一个H而写成H等于后面这个东西,然后呢,我的目标就变成去最大化这个R乘以H的,Trace,这个就是我现在的优化目标。

然后这个HH矩阵是一个跟R无关的东西对吧,那么为了求解这个最优化形式,其实它对应的有一个定理,我们其实是利用这个定理来告诉说,R应该起到什么时候,会让他这个trace结果最小,这个定理它的形式是说。

对于任意的对称正定矩阵,M和正交矩阵B1定有M矩阵的trace,是大于等于B乘以M的trace,一个非常简洁的关于G的一个不等式,那么这个证明呢可能稍微有点复杂,对这块大家也也不需要理解。

其实就是你如果觉得你看的,你觉得你能看得懂的话,你可以尝试去呃尝试去看一下,然后如果你觉得你肯定看不懂的话,你就不需要在上面花时间对吧,只是有这样一个定理,就是如果你之后啊无意中碰到的话。

你就是再回头来看一看这个证明,然后这个证明了它整体的逻辑是什么,整体逻辑是说我把这个M矩阵,因为M矩阵是对称正定的矩阵,那么我就可以用最开始给大家介绍的,对称正定矩阵的那个平方根分解的那个形式。

就是我可以定义一个S矩阵,它也是对称正定矩阵,然后呢满足X的平方等于M,利用这个分解,然后把这个trace和trace bm,都写成更简单的形式,把trace bm写成trace b乘以X的平方。

然后呢利用trace信是把一个S乘到左边来,然后因为S本身是一个对称矩阵,所以可以写成trace x转置乘以B乘以S,然后呢我可以直接去计算trace m,也就是S转置乘以S的。

它的对角线应该是SI转置乘以SI,SI是S矩阵的第I列,那后面这个矩阵S转置乘以B乘以S,它的对角线,它的DX对角项应该是SI转置乘以B乘以SI,所以这两个矩阵的对角线,我都可以直接写成S和B的关系。

然后那自然的trace也就可以写成,两个对角项求和,那么写成这个形式之后呢,关键的这个不等号就在这个地方出来,也就是说对于每一项SI转置乘以B乘以SI,它一定是小于等于SI转置乘以SI的。

因为这个B转B矩阵它只是一个正交矩阵,它是不会改变这个SI矩阵的模长的,所以你SI去点乘上一个BSI,这个向量它一定是不会小于等于啊,它是一定小于等于SI转置乘以SI的,那于是也就自然得到了trace。

BM是小于等于trace m的,OK这个证明可能稍微有点难度,就是大家有有余力的话,可以去稍微仔细理解一下,没有语义就算了,就是有这么一个定理存在就行,那么有这样一个定理的话,我们就可以说。

如果我存在一个R矩阵,让这个R星存在一个R1个一个正交矩阵R星,它可以让R星H是一个对称正定矩阵的话,那么一定下有下面的关系,就是trace rh对于任意的矩阵R,任意的一个正交矩阵。

RRH的trace还可以写成后面这个结果,后面这个结果中间我插了一个R星,转置乘以R星,为什么要插呢,你就会发现前面这一项结合出来,它是一个正交矩阵,后面这一项结合出来,它是个对称矩阵。

而我们根据刚才的定理,一个正交矩阵乘以对称矩阵,它的trace是一定小于,等于这个对称矩阵本身的,也就是小于等于RCH的trace,所以如果可能在一个R星矩阵,可以让R星H是对称正定的矩阵的话。

那么这个R就一定是使得rh trace,最大的那个矩阵,这可能稍微有点绕,OK但是结论就是这个结论是清晰的,就是说什么情况下,偶尔矩阵会使得RH的trace最大呢,那就是一个R矩阵。

使使得RH这个矩阵是一个对称正定矩阵,那RA是什么时候对称正定呢,你就可以求,你就可以把H的这个SBD分解写出来,H等于U乘以sigma乘以B转置,然后如果这个R等于V乘以UT的话。

那么这个时候R乘以H等于V乘以,西格玛乘以VT,这个东西它就是一个对称正定矩阵对,因为西格西格玛里面每一项都是正,每一项都是非负的,然后V是VV和V转置,又是一个最后是一个对称的一个结果。

所以如果你R写成V乘以UT的话,那么RH就是对称正定矩阵,那么这个R就是使得我们之前给出的那个,trace最大的那个结果,OK当然这个地方需要有一个修一个小bug,就是我们刚才就是这个U乘V乘以UT。

这个矩阵它不一定是一个行列式为正义的矩阵,那么如果他的行列式是一的话,那么最终的这个对应的这个旋转矩阵,它其实是中间需要再乘一个一一,一的一个单位阵,把它乘出来,然后这个R才是我想要的这个旋转矩阵。

然后这个结果呢就是推导的话,可能又会有一些复杂的东西,这个就大家去看这个对应的这个这个链接吧,所以我们最后可以总结一下,形状匹配的这个算法,他说的是其实是对于任意的一个变化,对我们没有假定说这个变换。

它是一定是个线性变换,我可以说一个任意的变化,甚至是比如说在这个图上画,它就是两个图形,我只不过给他找了对应的点,我都可以对它进行匹配,匹配的方法就是我先去计算这些点,对于他各自之心的偏移。

然后把这个偏移组装成一个矩阵H,然后对H进行这个特征值分解,得到H等于U西格玛BT,然后呢,里面的这个U和VT,就可以用来组装这个最佳的旋转矩阵R,然后呢拿到旋转R,然后我就可以得到这个最佳的相对TT。

所以有了R和T,我就可以把两个图片或两个形状,给它对齐到一起,这个就是形状匹配算法,这个算法在图形学里面有非常多的应用,不管是在模拟里面也好,还是在几何处理里面也好,甚至在图片里面都会有应用。

就是大家呃应该之后就是可以碰到,然后我们作业里面会有一道题,就是让大家去实现一下,这个是matching这个算法,然后去看一下它的一个在碰撞处理中的应用,OK关于这部分大家有什么问题,这中间的这个推导。

如果就是太大家觉得有点难的话,就是呃没有没有关系,就是大家可以把这个结论给他记下来,这个算法流程还是一个非常经典的流程,是,OK没有问题的话,我们接下来再看另外一个例子。

就是使用这个特征值分解来做这个压缩的例子,那么使用特征值分解它做压缩的原理是什么呢,是说对于任意的一个图像,一个M乘N的图像,我都可以把它看成是一个大型的一个稠密矩阵,对吧,比如说我如果是啊。

五百五百一十二乘以512,512像素的图像,可以看成是一个512乘以,512的一个矩阵,然后这个矩阵我就可以直接做SD分解,然后呢这个SP分解我可以换一种写法,把它写成下面这种形式。

下面这个形式里面每加的一项其实是对应的,把这个西格玛这个矩阵的他的第I行,它的第I个对角项拿出来,然后对应U的第I列和V转置的第I行对吧,把它相当于把这个分块矩阵乘法写开,写成下面这个形式。

然后下面这个形式呢,它是一个很多个矩阵相加的形式,加上这些每一个矩阵,就这个UI乘以vi转置,这个矩阵都是对应一个值为一的矩阵,对吧,因为我是两个向量叉乘出来的,它是一个值为一的矩阵。

然后同时它对前面有个系数西格玛I,那这个结果就是说一个A矩阵可以写成这么些,这么些个矩阵连加的形式,那么我们对它进行压缩的时候呢,其实是干一件什么事呢,就是把这个求和给它截断。

我们只保留前面几个矩阵的求和,但是后面后面的这些很多矩阵的求和,就给它扔掉了,为什么可以这么干呢,就是我们可以看一个结果,就比如说对于这样一张512,乘以512的图像。

我们可以去看它对应的这个特征值的分布对吧,我们可以把它所有512个特征值,全求出来,然后去看它这个特征值的大小,你就会发现大部分的特征值,就是最开始的那几个特征值是很明显的,是很大的。

但是这个特征值会立马衰减,衰减到这个地方,你看十的零次方就是一衰减到一这个规模,然后再进一步抓线,再进一步衰减,它会衰减的越来越小,这个代表什么含义呢,就是说前几个特征值最大的那几个特征值。

其实它就占了整个图片很重要的一个比重啊,后面那些小的特征值,因为它那个前面那个系数很小,所以他就没有那么重要了,那于是呢我如果想去压缩这个图像的话,我其实只需要在特征值这个地方,给他来一个阶段对吧。

比如说在对于这个图来说,我可以看大概什么几十的这个位置,给他来一个阶段,后面这些值,因为我知道它的值很小,所以对于前面这个求和来说,它的影响就很小,所以呢我只需要保留,前面几个和西格玛比较大的情况。

就可以对这个图片进行压缩了啊,这个标题可能答的有问题啊,这个不是特征值,这个是奇异值,这个我之后改一下,啊这个地方也写错了,这应该是奇异值额,那么我们可以看一下这个压缩的结果,假设我们只保留一个奇异值。

也就是这个图里面最大的这个值,只保留一个的话,那么整个图片呢它就变成这样,一个一个一个样子,这个样子它对应的就是一个秩为一的矩阵对吧,你可以看到它里面有很多的横竖,他其实对应的就是一个质唯一的一个矩阵。

那这个时候基本上图片你是看不出来,他原来的那个样子对吧,这是因为我们压缩太过了,但是如果我们把这个数字,比如说从一加到四,那这个时候你就能大概看出来,这个地方有一个人形了对吧,这个时候呢。

整个图片它是由四个是唯一的矩阵加起来,那如果我把这个特征值的个数,进一步把这个棋子的个数进一步往上加,加到比如16,这个时候这个人就已经比较清晰了,但是你可以看到中间的很多细节都是糊的。

这个时候我使用的这个内存,其实只占到了我之前图片的3。15%,为什么会少呢,因为对原来的图片,我只需要存512×512,这么多个像素的值,但是现在呢我只需要存16个值为一的矩阵,每一个值为一的矩阵。

我只需要存512×2,这么多个像素就可以对吧,然后一共16个,所以它的压缩率就是百分之百能到3%,但这个时候这个图片呢,你就能大概看出来是个什么样的图片,如果你进一步,比如说我用十六十四个特征值。

64个奇异值的话,这时候我使用压缩之后的这个图片,大小是原来的啊,12 12。5%,然后这个时候呢,你可以看到这个人像就已经很清晰了,但是这个图片呢在这些啊光滑的地方,它有很大的很多的这些噪点。

这些噪点就是我丢掉的那些呃,特征值里面表达的东西,OK那么这样一个压缩过程,其实最近呢就是关于这个什么大语言模型啊,还有之类的一些东西的,它其实非常有用的,这里面有涉及到一个非常重要的技术。

叫laura laurrank adaptation of large language models,他说了一件什么事情呢,就是对于一个大语言模型,它里面有很多很多的参数。

如果我想find to这些参数的话,我就要去改这些参数嘛,比如说我中间有一个很大的一个线性层,一个W而且D乘以K的很大的一个矩阵,那么这个矩阵我如果直接想改它的话,那我是不是得。

就是把整个大语言模型给他存下来,然后去改,这是我们每一次跑一遍FORWORD,都需要去ford这个东西,然后反向传播也是一样的,那个时候整个训练的成本就很高了,那么LAURA干件什么事呢。

就是说我在改的时候呢,我其实只需要改增量对吧,我就是看我啊find to的时候呢,改这个W正呃,相对它改了多少,然后相对它的部分呢,我就可以一个类似于这个,我们刚才介绍这个SBD压缩的一个形式。

我用两个字很小的矩阵就置为R的矩阵,这个R是很小的一个值,两个就很小的人给他乘出来,它可以成为一个形状跟W1样的矩阵,然后把这个矩阵跟W加起来,作为我最后的结果,那么这个时候呢我最后多出来的。

我需要训练的这这呃这些参数呢,它相对于原来的W矩阵,就是一个小规模的东西对吧,就是下面这个压缩率这个表达的东西,就是我可以用,比如说我可以用类似于什么10%,这样的参数个数,然后去翻译成整个大的模型。

这个时候我训练的经济性就会很高了,但是同时呢因为我们知道这个W矩阵本身,它包含的信息,就可以利用SVD分解进行一个压缩,所以呢这个信息呢他也没有丢失太多对吧,所以利用SD分解。

你就可以构造像LAURA这样的方法去帮助你,fighting大模型对吧,当然劳尔只是一个这个地方介绍,只是一个劳尔的一个基本思想,他自己也有很多其他的这些技术细节,其实就是大家去啊。

如果对这个东西感兴趣的话,可以进一步了解,呃然后SPD,我们刚才就是介绍了一堆这个SBD对吧,那么这里面涉及到一个问题,就是说SVD它其实是一个可微运算,也就是说如果我把A矩阵做了SD分解。

那我怎么知道这个分解之后的结果,跟A之间的导数关系呢,也就是这个西格玛矩阵对A矩阵的导数是多少,如果我把这个SVD作为神经网络的一个模块,那么在优化需要反向传播,对不对。

那么我已知这个A矩阵的这个这个偏差,德尔塔A是多少,在反向传播的时候,我怎么去推这个西格玛和R它的偏差是多少,所以在这些情况下,你可能是需要知道这个SBD的导数是多少的,那么呢这个问题本身它呃啊。

也不是特别简单对吧,我们这地方啊给一个结果,就是关于这个啊奇异值的导数啊,不好意思,就是这个PPT里面,后面所有的特征值应该是都错了,应该是奇异值啊,不好意思呃,比如说这地方给个例子。

我们就给大家看一下,说如果我知道一个矩阵F,它的奇异值分解是U西格玛VT,我怎么求他的这些奇异值,关于F本身的导数怎么来求呢,我就可以利用这个,F本身呢它一个一个德尔塔就是它的一个围绕。

或者说就是它的一个微分,我们看这个德尔塔F它等于多少,那么利用矩阵求导的链式法则,你可以把它拆开成这三项,然后呢,这三项里面你可以把德尔塔西格玛拿出来,这个东西是我们想要的对吧。

就是你在这个等式左边乘以一个,右转至右边乘一个V,那么就可以得出来,德尔塔西格玛等于后面这个东西,然后后面这个东西呢它里面有一点,你会发现这个U转置乘以德尔塔U,以及V转置乘以德尔塔V是两个反对称矩阵。

为什么这个东西,其实在上一节给大家讲这个旋转的求导的时候,提到了这个事情对吧,就是旋转求导里面,如果你有啊U是一个正交矩阵的话,那么U转置乘以U等于一个单位,你把这个等式左右两边同时求微分。

那么就可以推出来,U转置乘以德塔U其实它是一个反对称矩阵,那么反对称矩阵的对角线其实是零对吧,因为反对称矩阵的对角线by by definition,根据定义它就是零,所以上面这个式子。

因为我知道西格玛是一个对称,而西格玛是个对角矩阵,那我只需要两边同时求一个它的对角项,就可以得到这个啊,西格玛的德尔塔,西格玛等于后面这个东西,它的一个对角线的部分,那么这个等式告诉我们。

其实就是这个西格玛和F之间的导数关系,OK吧这个就是给大家做一个示例,就是如果你后面需要这个sigma,关于F的导数的话,可以看看这个推法,OK那关于歧义是分解的这些呃,这个理论部分我们就讲到这里。

然后关于实现的话,一般来说SBD算法是一个比较耗时的算法,这个它是跟这个矩阵规模是很密切相关的,然后好在呢SD现有的这些实现是比较齐全的,然后比如说如果你需要做小矩阵的SVD分解。

比如说是一个3×3的矩阵,或者是2×2的矩阵的话,有非常好的这些加速算法是这个指令集,指令集及优化的,这个SPD,SPD算法,能够很快的帮助你做这个33矩阵的CD分解,然后对于大规模的稀疏的矩阵的话。

像这些线性代数库,基本上都会提供给你这样的接口来优化,来来实现这个优化好的SPD算法,所以就是大家大部分时间就只需要调包,就可以了,基本上算法都有很好的实现,但是一定要注意SP本身的效率问题。

它是比较耗时的,OK这就是关于SVD部分的介绍,关于这部分大家有什么问题吗,这些内容本科讲线性代数,确实,因为我们这课是这个基于本科线性代数之上的,所以就是还是得大家先把这个本科的线性代数,学明白了。

然后再来看这个课程,因为那个东西是基础,张量分解跟这个东西是不是有点像,张量分解啥张量分解跟哪个东西有点像,给SPT分解,我可能没太懂你的意思,张量分解,张量分解是啥,关于张量的话。

就是大家用到的时候就可以再去学这个东西,对graphic来说就啊不是特别的那个必要,就是当有些有些东西特特定的领域很很有用,但是不是所有东西都需要从张亮那个角度去做,有教材推荐吗。

呃线性代数的教材就是最好的,应该就是那个MIT的那个课吧,MIP的那个课应该是应该是公认大家最好的,线性代数的这个课,然后他那个对应的有讲义,如果你觉得课上的东西不是人会懂的话,可以从那个地方开始补起。

对那个老爷子编的那个线性代数,那个课讲的非常好,讲的时候我都懂,讲完就忘了没事,这个东西就是今天讲了也不肯定不能期望,大概就是一下子全懂了,就是之后如果碰到的话,能用就可以。

就是比如说你知道这东西大概呃,跟什么东西有关,然后就是你可以自己去查相应的资料,或者看一下这个现在这个课程录播啥的,就是能够重新捡起来就可以,毕竟数学这个东西就是对于讲某些概念的时候,它是非常必须的。

比如说如果后面大家如果上图形学的课程,用到了这个谁matching算法的话,那么SBD这一块就是必须的,但是如果你用不到那些东西的话,那他就不是必须的,所以这个课本身它也不是一个,虽然不是一个必修课程。

不是说你非得学完零一才能去看101,而是说就是呃,如果你发现看到后面的课程里面,有哪一块的数学不是特别清楚的话,你可以回头来看一下啊,这个课把它作为一个一个一个资料,然后去看他,然后自己也可以有方法。

就是有目标去找一些其他的教程来看,OK那关于SVD我们就讲到这里,然后接下来给大家介绍一个这个呃主成分分析,pca principal component analysis部分的东西。

这个东西它跟SBD其实是密切相关的对吧,所以很多推导呢如果大家熟悉SBD的,就是就基本上差不多,那么SBPCA这个东西,它是用来做这个降维表达的,什么叫降维表达呢,就是我有一个呃,比如说这个图里面画的。

我有一个二维的一个一些数据,就是每个点每个点它都是一个二维的点,它代表一个数据点,那我有这样一堆的一个二维的数据集,我其实可以通过降维表达,把它降维成一个一维的数据,怎么降维呢,就是我给他找一条线。

比如说对于这个图里面,我找一条这个倾斜的这个直线,然后把所有的这个点投影到这个直线上,那么在这个直线,这个这些点在这些直线上的分布,其实就很大程度上,能够反映这个数据集本身的分布,对吧。

但是原来这个数据集是二维的,我现在给它投入到这个直线上,它就变成了一维的数据,所以这个就是数据降维,数据降维能够帮助我们用更小的数据维度,去理解高维的数据集,对吧,那这里面关键自然就是。

我如何去找这个投影的方向对吧,我们可以一点点来看,比如说假设我有一个二维的数据集,N维数据集,我假设只用一个点去近似它,那么自然这个点就应该是,就是这个数据集的一个平均点对吧,这个数据集的一个平均值。

我把它记为M就是这个数据集本身的零阶近似,那么这个数据的一阶近似是什么呢,一阶近似就是跟刚才图里画的一样,就是我找一条直线,然后把整个数据投影到这条直线上去,看这个数据集在这个直线上的分布。

那么就是这个数据集的一阶近似,那么为了找这个一阶近似呢,我们就要去最小化这个直线啊,去找这个直线的方法方向,使得我的数据投影到这个直线上,能够最小化它跟这个直线的距离,那么这样的话这个点啊。

这个这个方向才能最好的代表这个数据集对吧,那么我可以推导一下,如果我定义了一个任意一条直线,它经过M这个点,并且它的方向是V,那么可以写成这样一条一个一个直线对吧,X等于M加上tb。

然后呢我把所有的数据点投影到这个直线上,那就把这个啊把这个点xi减去直线上的M点,然后再点乘B,这个是之前讲计算几何的时候会讲到,那么可以求到这个点在垂直方向,距离这个直线的距离。

这应该是XI减去本身模长的平方,减去投影的平方对吧,这是勾股定理呃,那么我去最小化这些点距离这个直线的距离,因为xi减去M还是一个跟直线的方向,没有关系的东西,所以呢我最小化DI的平方。

也就是最大化这个xi转置xi1撇的平方对吧,那么这个XY1撇呢,利用这个投影关系,可以把它写成下面这样一个形式,这个形式中间的这个矩阵,我们就称之为方差矩阵S,也就是说,如果我要找一个直线方向去最小化。

所有数据点在这个直线方向上的距离,勾引到这个直线的距离,那么转而我应该是去最大化这个结果,最大化这条这些数据点在这条直线上的方差,那么为什么有这样的结果,大家可以看下面这个图里看,就是对这样一个数据集。

我如果找了一个方向,是这样一个方向,那么你把所有点投影到这个直线方向去的话,他这些点就会分布的比较集中,如果我找的是一个绿色的这个方向的话,那么这个方向显然是能够,更好的代表这个数据集的。

那么对应的结果就是,这些点在这个直线上的分布是比较分散的对吧,所以说你去找一个方向,最小化这个variance最小化这个距离,其实也就是最大化,这些点投影到这个直线之后的variance。

那么最大化这个结果最大化,V转置乘以SVS真定成这个样子,怎么最大化呢,我们可以看S的啊,这个特征值分解对吧,S是一个半正定矩阵,我可以把它写成Q乘以拉姆达,乘以Q转置的形式,它写成后面这个形式。

然后同时呢,我可以把认为这个拉姆达,它有一个大小的培训关系,拉姆达零是最大的,然后拉姆达N减一是最小的,然后因为S本身是半正定的,所以他所有的拉姆达都大于等于零,对吧,那我要找一个方向。

V转置乘以SV最大,那么把S的这个呃,特征值分解的这个形式代入进去,你可以写成后面这个样子,那后面这个样子呢把Q转置V写到一起,你就会发现这个目标他就是去最大化一个。

Q转置V这个向量的转置乘以一个对角矩阵,再乘以这个向量本身,那么这个结果什么时候能取到最大呢,那自然是这个V,Q转置乘以V等于1000的时候,那么这个时候V转至后面,这个结果能够取到最大值,拉姆达零。

对吧,因为拉姆达本身是一个对角矩阵,然后它的最大值是拉姆达里,最小值是拉姆达N减一,所以如果你两边乘以一个向量,两边乘以一个任意一个向量,Q转至B要转置,然后右边的乘一个Q转置V的话,它取到最大的时候。

应该是这个Q转置V,能够撑到这个最大的这个人值上,也就是让Q转置B等于1000的时候,那么Q转至V等于1000,对应的是什么呢,对应的也就是V等于Q0,也是V是Q矩阵的第一列。

也就是这个S矩阵对应特征值是兰姆达零的,特征向量,这个时候能够得到S的微转支撑,以SB是最大的,所以说如果我要找一个主方向,作为整个数据集的一阶近似,那么这个主方向就应该是S矩阵的最大。

特征值的对应的那个特征向量的方向,好吧,那我们找到一阶的近似之后呢,我们可以继续下去,比如说如果要找到啊,两个方向,也就是把它投影到一个平面上,把一个N维的数据集降到二维的话。

那我们就还需要确定剩下的一个分量,那么这个分量怎么确定呢,你就可以找这个这个这些数据点,在投影完第一个分量之后,还剩下的值,继续再把它投影到另外一个分量P上去,啊不对不对,说错了,应该是P是我的啊。

P是我的第一个主分量,说错了,不好意思,P是我的,刚才求出来的这个第一个主分量,TP等于S的最大特征值和特征,最大值对应的特征向量,然后呢把XI减去M他已经投影到P上的部分,减去考虑剩下的部分。

然后对于剩下的部分去找一个,找一个主分量出来,继续把剩下的部分找一个一阶近似出来,那么这就是一个类似于刚才那个东西的过程,刚才求一阶一阶近似的过程,然后你可以求一下这个矩阵,SI两撇乘以XI两撇的转置。

这个矩阵它变成什么样子,它会变成S减去拉姆达零乘以P乘以P转置,为什么是这个结果呢,给大家尝试一下,就是利用这个啊,P是S矩阵对应的最大的特征值的特征向量,利用这个性质。

把这个xi两撇乘以XY两撇转至这个东西展开,你就可以得到这个结果,那么你想换成这个结果之后呢,因为S本身它是写成Q乘以拉姆达Q转置,它可以写成后面这个结果对吧,然后你把拉姆达零乘以P乘以P转置。

也就是拉姆达零乘以Q0,Q0转置这一项拿掉之后,剩下的再有一项最大的,那其实就是后面这个结果了,就是他第二大的特征值了,对吧,所以说在你找完一阶分量近似之后,再找一个方向作为他的第二个分量。

作为它的二阶近似的时候呢,那这个时候你找的第二个分量,这应该是它对应第二大特征值的特征向量,那于是呢这个过程可以一直继续下去,总结起来CCA算法是一个什么样的流程呢,是说对于由X零X1直到XK减一。

这K个N维的数据点组成的数据集,然后如果我要找一个他的MV的近似,那我就找他的这个S矩阵,S矩阵定义成这个样子,它的前M个特征向量Q零一直到QM减一,也就是前M个前M大的特征值。

对应的特征向量Q0到QM减一,这个方向相互正交,当成了MV的子空间,这个MV的子空间,如果你把这个数据集投影到这个MV的子空间上,那么这个MV子空间里面的东西,就构成了这个数据集的地位表达。

这个就是PCA算法,对吧,那它有哪些应用呢,比如说它可以用来求这个点云的反向,比如说如果有任意的一个点云,它本身是没有法向信息的,然后我们取表面上一个点,我要怎么知道它的法向信息呢。

那我就可以把这个点周围的这些点拿出来,把它作为一个数据集,作为一个三维的数据集,然后去找他的第一个主分量和第二个主分量,那么这两个主分量它应该对应的是什么,对应的是我这个三维数据集。

它的一个二维的一个特征对吧,那么这个点云它表示的几何体,它的二维特征自然就应该是这个这个面的,这个点的法,这个表面的信息对吧,因为表面是一个二维的东西,所以如果你把这个点周围的这些点拿出来。

做PCA的话,那么得到的前两个方向,应该就是这个表面的两个切线方向,那么你拿到切线方向之后,再给他做一下叉乘,就可以得到这个表面的法向,法向方向,所以PC可以直接用来求点云的法向,但是这个地方注意的是。

就是这些只能告诉你一个无符号的方向,就是没有办法告诉你,这个法向应该朝外还是朝内,那么这个时候呢去确定这个法向的正负号,就需要别的算法,需要你去别的算法去判断,说这个这个方向应该朝哪个方向才是朝向外的。

好吧,我再看一集,再看一个例子,就是一个I跟face的例子,I can face,是一个早期的,一个做人脸识别的项目,就比如说我们这里有400张人脸的数据对吧,那么对应的就是我有400张。

112×92的图片,所以还是一个相对来说比较大的一个东西,我可以每一张图片我认为它是一个数据点,那么每一个数据点,它对应的就是112×92为,所以是一个非常大的一个空间,一个空间。

那么对应的是一个400个,112×92维的数据点,这么多个数据点我可以做做对他进行做PCA,然后呢我可以提取前40个主分量,PC的主分量,那么这40个分量呢,你把它挖出来就会是这个样子对吧。

就是看不出来是什么东西,但是没有关系,如果你懂这么多,400张图片,都给它投影到这个40维的空间里面去,的时候呢,你看它从它们对应的这些结果,你就会发现每一张脸,它其实就都比较像之前的这些图片呢。

当然有些结果是很很奇怪的,比如说中间这些结果能明显看到它是呃,它是有问题的,但是它整体上来说,它跟原数据集的分布是很像的对吧,那么这个东西就是一个原数据集的降维表达,每一个数据点原来是112×92位。

有这么多位,但是后来呢,因为我是把它投影到了一个40位的一,个子空间里面,所以每一个数据点只有40位,是吧,所以我大大降低了这个数据的这个额,数据的这个存存储上的这个开销。

但是呢它整体的分布呢跟原数据就是比较接近,那同时呢在这个模拟里面,也有使用这个PCA的方法,就是这个model reduction的方法,这个方法说的是什么呢。

是说如果我有一个整一个完全的simulation,一个模型的simulation,它这个模型是可能有很多个自由度的,因为你的mesh有很多的节点,所以自由度可能很多,如果你要模拟它的话。

这个它的开销是相对来说比较大的,那我就可以预先跑很多的这些simulation,把每一条simulation当成是一个数据集,当成是一个数据点,然后呢考虑对整个simulation进行这个PCA降维。

降维的好处就是降维之后的好处,就是我不再需要去模拟整个的模型,我只需要去模拟PC降维之后,那个子空间里面的自由度,所以我模拟的自由度会大大降低,但是由于我的PCA是原来数据集的一个近似。

所以我模拟出来的结果呢,又会是像之前模拟的一个结果,所以说这个PC这个东西它是可以用到模拟中去,帮助我做模拟加速的,这个如果大家之后上后面的模拟课程,应该是能看到这个看到这个应用的。

但是呢PCA它也是有明显的局限性的,它的局限性在什么地方,就是我其实假定这个数据,它是有这种线性的分布特征的,那是这个假设,对不对呢,对于大多数的数据来说,其实它都是不对的,比如说左边这个结果。

左边这个结果是一个三维的一个数据集对吧,每个点都是一个三维的数据点,然后它的分布呢长成图中这个样子,你可以看到整个数据集的分布,它其实是一个类似于一个圆形的分布,如果你硬要说的话呢。

它是一个类似于一个一维的数据集对吧,因为你所有点它是分布在一个圆圈上的,但是如果你去给他做PCA的话,你就只能得到一个二维的一个近似对吧,因为这个,如果我认为这些所有数据点,分布在一个圆上的话。

那么自然你的前两个主分项应该就是,这个圆的切线方向,对吧,它并不能很好的去model这个数据,分布在这样一个曲线上的这样一个特征,这个是PC也做不了的,那同时呢比如说还有像我们这种人体的数据。

不管你是从captured也好呢,还是说生成的也好,对人体这样的数据呢,它自然它不会是一个线性程度很高的数据,所以如果我有一个大的人体的数据集,你想用这个PC进行降阶的话,其实它也是比较困难。

但也不是说不能用,只是说它的效果可能没有那么好,那么为了解决这个问题呢,其实是有对应的方法的,其中一个方法,比如这个kernel pc的方法,它是什么意思呢,cannot pc直观上理解。

其实就是把原来的一个数据集,通过某个非线性的变换,映射到另外一个空间里去,比如说图中我其实有两类点,一类是绿色的点,一类是蓝色的点,他们应该是分开的,但是如果你用PCA进行分析的话。

你会发现两个特征是重合在一起的,但是如果你把它做了一次映射之后呢,这两个数据点这两个数据蓝色和绿色的东西,连蓝色和绿色两个部分就能够分开,这是由于我中间做了一次非线性映射导致的,那除此之外呢。

如果你想对一个非线性的数据集做降阶的话,现在更常用的方法就是使用这种啊,encoder decoder的结构,就是我直接上神经网络去做这个非线性的映射,把一个大规模的一个也不是大规模的吧。

一个高维的一个向量,通过这种神经网络层,映射到一个低位的latent code里面去,移植到一个引空间里面去,然后再通过decoder恢复到这个这个高维的,这个数据。

通过这样一个encoder decoder编码器,解码器的结构去做这个数据的降维,那么它的效果呢,自然是要比这个单纯的PC要好很多的,所以PC的局限性也可以通过这些方法来记。

那么这个地方我细节我们就不介绍了,大家有兴趣的话,可以去看对应的一些文献什么之类的,OK这个就是我们今天介绍了,关于SBD和PC的部分的知识,这里列出了一些参考文献,大家有兴趣的话可以去呃。

可以去看一看这个gilbert strange,就是那个MIT的那位老教授,这个后面这个链接,就是他上这个线性代数课程的这个链接,OK啊行,那我们今天就讲到这里,大家关于之前的东西有什么样的问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值