坐标变换

二维坐标变换

雨燕双飞 提交于 2019-11-28 06:04:07
平时开发程序,免不了要对图像做各种变换处理。有的时候变换可能比较复杂,比如平移之后又旋转,旋转之后又平移,又缩放。 直接用公式计算,不但复杂,而且效率低下。这时可以借助变换矩阵和矩阵乘法,将多个变换合成一个。 最后只要用一个矩阵对每个点做一次处理就可以得到想要的结果。 另外,矩阵乘法一般有硬件支持,比如3D 图形加速卡,处理3D变换中的大量矩阵运算,比普通CPU 要快上1000倍。 下面是3类基本的2D图形变换。 平移: 设某点向x方向移动 dx, y方向移动 dy ,[x,y]为变换前坐标, [X,Y]为变换后坐标。 则 X = x+dx; Y = y+dy; 以矩阵表示: 1 0 0 [X, Y, 1] = [x, y, 1][ 0 1 0 ] ; dx dy 1 1 0 0 0 1 0 即平移变换矩阵。 dx dy 1 旋转: 旋转相比平移稍稍复杂: 设某点与原点连线和X轴夹角为b度,以原点为圆心,逆时针转过a度 , 原点与该点连线长度为R, [x,y]为变换前坐标, [X,Y]为变换后坐标。 x = Rcos(b) ; y = Rsin(b); X = Rcos(a+b) = Rcosacosb - Rsinasinb = xcosa - ysina; (合角公式) Y = Rsin(a+b) = Rsinacosb + Rcosasinb = xsina + ycosa

PCA的数学原理

↘锁芯ラ 提交于 2019-11-28 04:05:06
原帖地址: http://blog.codinglabs.org/articles/pca-tutorial.html PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。网上关于PCA的文章有很多,但是大多数只描述了PCA的分析过程,而没有讲述其中的原理。这篇文章的目的是介绍PCA的基本数学原理,帮助读者了解PCA的工作机制是什么。 当然我并不打算把文章写成纯数学文章,而是希望用直观和易懂的方式叙述PCA的数学原理,所以整个文章不会引入严格的数学推导。希望读者在看完这篇文章后能更好的明白PCA的工作原理。 数据的向量表示及降维问题 一般情况下,在数据挖掘和机器学习中,数据被表示为向量。例如某个淘宝店2012年全年的流量及交易情况可以看成一组记录的集合,其中每一天的数据是一条记录,格式如下: (日期, 浏览量, 访客数, 下单数, 成交数, 成交金额) 其中“日期”是一个记录标志而非度量值,而数据挖掘关心的大多是度量值,因此如果我们忽略日期这个字段后,我们得到一组记录,每条记录可以被表示为一个五维向量,其中一条看起来大约是这个样子: 注意这里我用了转置,因为习惯上使用列向量表示一条记录(后面会看到原因),本文后面也会遵循这个准则

Qt绘图之QGraphicsScene QGraphicsView QGraphicsItem详解

亡梦爱人 提交于 2019-11-28 02:43:02
Graphics View提供了一个界面,它既可以管理大数量的定制2D graphical items,又可与它们交互,有一个view widget可以把这些项绘制出来,并支持旋转与缩放。这个柜架也包含一个事件传播结构,对于在scene中的这些items,它具有双精度的交互能力。Items能处理键盘事件,鼠标的按,移动、释放、双击事件,也可以跟踪鼠标移动。Graphics View使用BSP树来提供对item的快速查找,使用这种技术,它可以实时地绘制大规模场景,甚至以百万items计。Graphics View在Qt 4.2中被引用,它替代了它的前辈QCanvas。 Graphics View的体系结构 Graphics View提供的是一种类似于Qt model-view的编程。多个views可以监视同一个场景,而场景包含多个具有多种几何外形的items。 场景 QGraphicsScene 表示Graphics View中的场景,它有以下职责: 为管理大量的items提供一个快速的接口。 传播事件到每个item。 管理item的状态,例如选择,焦点处理。 提供未经变换的渲染功能,主要用于打印。 场景作为QGraphicsItem对象的容器。通过调用QgraphicsScene::addItem()把这些Items加入到场景中。可以使用众多的查找函数来获取特定的items

坐标变换,空间变换的本质

自古美人都是妖i 提交于 2019-11-28 02:42:05
坐标变换或空间变换,本质是相对坐标的变化,绝对坐标没变。 世界空间有两个物体A,B。将A变换到B的坐标空间意思是:将A从世界空间变换到B的局部坐标空间,也就是在B的局部坐标系中重新定位A的坐标(也就是求出A在B坐标系中的相对坐标) 做法很简单: 1,B-A得到一个向量V, 2,把V分解到B的局部坐标的各轴上 得到的结果就是A在B的局部坐标系中的坐标,物体A也就变换到了物体B的局部坐标系中,简称为A变换到了B的空间中。 在游戏引擎开发中最常用的几种变换: 1,渲染管线中为了渲染物体,将物体变换到相机空间 2,渲染阴影贴图shadow map时,将相机变换到灯光空间 来源: https://www.cnblogs.com/timeObjserver/p/11386672.html

Qt绘图之QGraphicsScene QGraphicsView QGraphicsItem详解

只谈情不闲聊 提交于 2019-11-28 02:38:27
Graphics View提供了一个界面,它既可以管理大数量的定制2D graphical items,又可与它们交互,有一个view widget可以把这些项绘制出来,并支持旋转与缩放。这个柜架也包含一个事件传播结构,对于在scene中的这些items,它具有双精度的交互能力。Items能处理键盘事件,鼠标的按,移动、释放、双击事件,也可以跟踪鼠标移动。Graphics View使用BSP树来提供对item的快速查找,使用这种技术,它可以实时地绘制大规模场景,甚至以百万items计。Graphics View在Qt 4.2中被引用,它替代了它的前辈QCanvas。 Graphics View的体系结构 Graphics View提供的是一种类似于Qt model-view的编程。多个views可以监视同一个场景,而场景包含多个具有多种几何外形的items。 场景 QGraphicsScene 表示Graphics View中的场景,它有以下职责: 为管理大量的items提供一个快速的接口。 传播事件到每个item。 管理item的状态,例如选择,焦点处理。 提供未经变换的渲染功能,主要用于打印。 场景作为QGraphicsItem对象的容器。通过调用QgraphicsScene::addItem()把这些Items加入到场景中。可以使用众多的查找函数来获取特定的items

渲染坐标变换

拟墨画扇 提交于 2019-11-27 03:13:55
渲染坐标变换: Unity中可以通过内置矩阵实现 坐标空间的相互转换 ,主要是通过 矩阵乘法 。 比如内置矩阵 : UnityObjectToWorldDir(int float3 dir)--------对象空间方向矢量-->世界空间方向矢量; UnityObjectToWorldNormal(int float3 norm)--------对象空间法线向量-->世界空间法线向量; UnityWorldSpaceViewDir(int float3 worldPos)--------世界空间坐标位置-->视图方向; UnityWorldSpaceLightDir(int float3 worldPos)--------世界空间坐标位置-->光照方向; 这里一个很重要的问题,比如对象空间到裁剪空间的变换,具体的实现过程很重要,矩阵变换的底层如何实现将是很重要,之后补充。 来源: https://www.cnblogs.com/Optimism/p/11341013.html