旋转变换

聊聊GIS中那些坐标系

与世无争的帅哥 提交于 2019-12-11 07:10:31
聊聊GIS中那些坐标系 </h1> <div class="clear"></div> <div class="postBody"> 转载请声明到标题。 B站/博客园/CSDN/知乎:@秋意正寒 很开心能跃居百度关键词第一位,近期打算重写一下这篇博客,以更系统、更齐全的角度,更通俗易懂的语言讲授坐标系的初步认知。 从第一次上地图学的课开始,对GIS最基本的地图坐标系统就很迷。也难怪,我那时候并不是GIS专业的学生,仅仅是一门开卷考试的专业选修课,就没怎么在意。 等我真正接触到了各种空间数据产品,我才知道万里长征第一步就是:处理坐标系统。 想必各位从业人员多多少少都会听说过几个名词,可能有那么点印象吧。比如,高斯克吕格,北京54,西安80,WGS84,投影坐标系统等等。 今天就从头说起,讲讲那些坐标系统的事情。 惯例,给个目录: 经纬度与GCS(Geographic Coordinate System, 地理坐标系统) 平面坐标与PCS(Projection Coordinate System, 投影坐标系统) GCS和PCS的转化问题(三参数与七参数问题) 火星坐标问题 在第一部分,我介绍一下以经纬度为准的地理坐标系统,也顺带提及一下我国的高程坐标系。主要涉及的内容有:大地水准面问题,椭球问题,常见的GCS(如北京54,西安80,CGCS2000,WGS84等)

位置角度平移旋转,“乱七八糟”的坐标变换

风流意气都作罢 提交于 2019-12-11 01:19:15
​本文转载自微信公众号ROBOTICS 原作者:CC 编辑:古月居 原文链接: https://mp.weixin.qq.com/s/eOq5QweS-VIg2e0qmkihMw 今天我们要讲所有学习机器人学的人都需要具备的一项基本技能——坐标变换。看明白这篇文章,你需要一点基础的向量和矩阵知识,不用多,只要知道 向量的加减,点乘(内积);矩阵的定义、加减乘逆以及转置;还有矩阵与向量的乘法 就够了。 机器人学为什么需要坐标变换呢?因为控制一个机械臂的根本,就是弄明白每一个关节的joint position与end effector的position and orientation的关系,用更简洁的话来讲,就是joint space与operational space之间的互相映射关系。这里有两个小说明: 不仅仅是位置/角度的映射关系,也包括 速度、加速度、力或扭矩的映射关系 所有我直接用英文而没有翻译的词汇,都是我在 第一篇文章 中解释过的重要概念 好了,接下来就让我们暂时不谈机器人,先把让很多人觉得头疼的坐标变换搞明白。 坐标系(coordinate system) 描述空间位置、速度和加速度,大部分都是用笛卡尔坐标系,也就是大家熟知的三个互相垂直的坐标轴组成的坐标系。我只想强调几个地方: 像题图那样的彩色坐标系,若无特别说明,都是 rgb(红绿蓝)依次对应 xyz

罗德里格斯公式

风流意气都作罢 提交于 2019-12-10 15:49:58
在三维空间中,给定一固定旋转轴,任意初始向量绕旋转轴旋转任意角度,可表示为 ,其中,v 表示旋转前向量, 表示旋转后向量,R 表示旋转矩阵,该矩阵参数与固定旋转轴坐标,旋转角度有关。下面使用图示推导旋转矩阵 R: 如上图所示,单位向量 为固定旋转轴,原向量 v 旋转 后为 ; 分解原向量 ,向量 v 与向量 k(或者 ) 的夹角为 ,该值已知; 向量 构成直角三角形,则有: , ; 向量叉乘 ,其方向垂直于 构成的平面,w 的模长为 ,则有 ,且两向量正交; 以上向量 构成三维空间已知正交向量基, 可表示: ,在 向量构成平面上, 旋转 后为: , ,由于 ,进一步化简为: ; 定义向量 ,其方向与 平行,其模长为 ,则 ; 引入向量 的叉积矩阵 ,叉积运算可转换为矩阵运算 ; 改写 线性组合 ,引入叉积矩阵 K得: , 则旋转矩阵 。 以下给出代码实现: 1 void GetRotateMatrix(Matrix<float>& Q, Vector<float>& axis, float theta) 2 { 3 // 使用罗德里格斯公式(Rodriguez formula) 4 5 // 构造单位向量 6 float len = sqrt(axis.data[0] * axis.data[0] + 7 axis.data[1] * axis.data[1] + axis

---CSS3绘制8种超炫的加载动画

泄露秘密 提交于 2019-12-10 09:48:45
CSS3绘制8种超炫的加载动画 逛前端开发网站的时候,偶尔发现一组非常炫酷的CSS3加载动画,遂迫不及待的做个Demo保存下来。 这些加载动画用到了CSS3的旋转transform属性,颜色透明度设置和伪元素操作等CSS技术。奇妙的组合,产生了意想不到的效果。 1.上下起伏波动的加载动画: #loader1, #loader1:before, #loader1:after { background: #f2fa08; -webkit-animation: load1 1s infinite ease-in-out; animation: load1 1s infinite ease-in-out; width: 1em; height: 4em; } #loader1:before, #loader1:after { position: absolute; top: 0; content: ''; } #loader1:before { left: -1.5em; } #loader1 { text-indent: -9999em; margin: 50px 50px; position: relative; float: left; font-size: 11px; -webkit-animation-delay: 0.16s; animation-delay: 0.16s; }

6-DoF相关基础知识整理

岁酱吖の 提交于 2019-12-09 22:24:28
刚刚接触这个领域,因此打算花点时间先整理一下相关的一些基础的知识。 首先是第一个概念 一、什么是6-DoF,即6个自由度是什么? 首先,先解释一下自由度,自由度与刚体在空间中的运动相关。可以理解为物体移动的不同基本方式。 自由度一共有6个,可以分为两种类型:平移和旋转。 1. 平移运动   刚体可以在3个自由度中平移:向前/后,向上/下,向左/右 2. 旋转运动   刚体在3个自由度中旋转:纵摇(Pitch)、横摇(Roll)、垂摇(Yaw) 因此,3种类型的平移自由度+3种类型的旋转自由度 = 6自由度 在任意一个自由度中,物体可以沿两个“方向”自由运动。例如,电梯限制在1个自由度中(垂直平移),但电梯能够在这个自由度中上下运动。同样,摩天轮限制在1个自由度中,但这是旋转自由度,所以摩天轮能够朝相反的方向旋转。 我们可以继续举例子,比如说主题公园。碰碰车总共有3个自由度:它只能在3轴中的2条里平移(无法像电梯那样上下移动);然后它只能以一种方式旋转(无法像飞机那样纵摇和垂摇)。 所以2个平移+1个旋转=3自由度。 无论有多复杂,刚体的任何可能性运动都可以通过6自由度的组合进行表达。 例如在你用球拍击打网球的时候,球拍的复杂运动可以表示为平移和旋转的组合。 二、PnP算法 1. PnP算法是什么? PnP(Perspective-n-Point)是求解 3D 到 2D

WebGL中的旋转和移动

早过忘川 提交于 2019-12-08 14:19:25
WebGL中使用rotate(mvMatrix,[0,1,0])函数进行旋转操作,其旋转总是以自身为中心轴进行。 使用translate(mvMatrix,[x,y,z])函数进行移动操作,其移动也是以当前物体变换后的坐标轴为基础。物体进行旋转后,其坐标轴的方向也发生了变化,其自身坐标系与物体坐标系已经不同,其移动方向以变化后的自身坐标系方向为基准。 使用两种操作时,一定要考虑两种操作的 先后顺序 : 1、先移动后旋转 mat4.translate(mvMatrix,[5,0,0]); mat4.rotate(mvMatrix,degToRad(moonAngle),[0,1,0]); 物体先移动到指定位置(此时,自身坐标系与世界坐标系相同),然后在变换后的位置绕自身坐标轴自转。其结果类似于地球的自转 2、先旋转后移动 mat4.rotate(mvMatrix,degToRad(moonAngle),[0,1,0]); mat4.translate(mvMatrix,[5,0,0]); 未旋转前,物体的自身坐标系与世界坐标系方向相同,旋转后,其自身坐标系方向发生了变化。这时进行移动操作,变换以当前的自身坐标系为基准进行。其结果类似于地球绕太阳公转。 本人是新手,有什么不对的地方还请大家多多指正啊! 来源: CSDN 作者: 无涯Andy 链接: https://blog.csdn

WebGL学习系列-基本图形变换

北城以北 提交于 2019-12-08 14:14:18
前言 经过前面的学习,我们已经可以绘制基本的图形了。本小节将介绍基本的图形变换,介绍在WebGL中,如何对基本的图形进行平移、旋转和缩放。 平移 在前面的小节中,我们已经绘制过一个三角形,那时候,它看起来是这样的: 我们知道,在WebGL中,要绘制一个基本的图形,我们只需要指定顶点的位置、大小和颜色,然后调用drawArrays接口进行绘制即可。现在,我们想要实现对三角形进行一个平移,比如,把它移到右上角的地方,那如何实现呢? 其实仔细想想,你会发现,我们要移动一个三角形,只需要移动它的三个顶点即可,然后WebGL将会自动在新的顶点位置把三角形绘制出来。 其原理示意图如下: 为了进一步说明在程序中是如何实现平移的,我们先来看下顶点着色器代码: // 顶点着色器代码(决定顶点的位置、大小、颜色) var VSHADER_SOURCE = 'attribute vec4 a_Position;\n' + 'uniform vec4 u_Translation;\n' + 'void main() {\n' + ' gl_Position = a_Position + u_Translation;\n' + // 设置顶点的位置 ' gl_PointSize = 10.0;\n' + // 设置顶点的大小 '}\n' ; 主要看到两个地方有所变动 : 1、添加了 uniform vec4

webgl第13课-图形变换之旋转

落爺英雄遲暮 提交于 2019-12-08 14:12:22
需要源码可以Q群:828202939 或者 点击这里 希望可以和大家一起学习、一起进步!!纯手打!! 书籍是PDF电子档,也在Q群里,所有的课程源代码在我 上传的资源 里面,本来想设置开源,好像不行! 如有错别字或有理解不到位的地方,可以留言或者加微信15250969798,在下会及时修改!!!!! 上一节课我们学习了图形的变换之平移 这一节课我们将学习图形的变换之旋转 如果你学会了图形的平移,再学习旋转的话你就会发现他们的实现方式是一样的,那就是在顶点着色器中计算顶点变换后的新坐标 在学习旋转之前,我们先来看看需要知道的一些基础知识点: 1.旋转轴 图形将围绕旋转轴旋转 2.旋转方向 方向:顺时针或者逆时针 3.旋转角度 图形旋转经过的角度 webgl中默认右手法则旋转:右手握拳,大拇指指向旋转轴的正方向,区域手指的弯曲方向就是旋转的方向 旋转公式: x' = x cos 旋转角度 -y sin 旋转角度 y' = x sin 旋转角度 - y cos 旋转角度 z' = z JS的内置Math对象的sin() 和 cos() 方法可以进行三角函数 为了显示出效果,本案例旋转45° 也许你们觉得这样写比较麻烦,下一课我们将学习图形的矩阵变换 上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" />

深入浅出的讲解傅里叶变换(真正的通俗易懂)

点点圈 提交于 2019-12-08 03:13:56
原文出处: 韩昊 1 2 3 4 5 6 7 8 9 10 作 者:韩 昊 知 乎: Heinrich 微 博: @ 花生油工人 知乎专栏:与时间无关的故事 谨以此文献给大连海事大学的吴楠老师,柳晓鸣老师,王新年老师以及张晶泊老师。 转载的同学请保留上面这句话,谢谢。如果还能保留文章来源就更感激不尽了。 我保证这篇文章和你以前看过的所有文章都不同,这是 2012 年还在果壳的时候写的,但是当时没有来得及写完就出国了……于是拖了两年,嗯,我是拖延症患者…… 这篇文章的核心思想就是: 要让读者在不看任何数学公式的情况下理解傅里叶分析。 傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维模式。但不幸的是,傅里叶分析的公式看起来太复杂了,所以很多大一新生上来就懵圈并从此对它深恶痛绝。老实说,这么有意思的东西居然成了大学里的杀手课程,不得不归咎于编教材的人实在是太严肃了。(您把教材写得好玩一点会死吗?会死吗?)所以我一直想写一个有意思的文章来解释傅里叶分析,有可能的话高中生都能看懂的那种。所以,不管读到这里的您从事何种工作,我保证您都能看懂,并且一定将体会到通过傅里叶分析看到世界另一个样子时的快感。至于对于已经有一定基础的朋友,也希望不要看到会的地方就急忙往后翻,仔细读一定会有新的发现。 ————以上是定场诗———— 下面进入正题: 抱歉,还是要啰嗦一句

【OpenCV】图像几何变换:旋转,缩放,斜切

大憨熊 提交于 2019-12-08 02:56:45
几何变换 几何变换可以看成图像中物体(或像素)空间位置改变,或者说是像素的移动。 几何运算需要空间变换和灰度级差值两个步骤的算法,像素通过变换映射到新的坐标位置,新的位置可能是在几个像素之间,即不一定为整数坐标。这时就需要灰度级差值将映射的新坐标匹配到输出像素之间。最简单的插值方法是最近邻插值,就是令输出像素的灰度值等于映射最近的位置像素,该方法可能会产生锯齿。这种方法也叫零阶插值,相应比较复杂的还有一阶和高阶插值。 插值算法感觉只要了解就可以了,图像处理中比较需要理解的还是空间变换。 空间变换 空间变换对应矩阵的 仿射变换 。一个坐标通过函数变换的新的坐标位置: 所以在程序中我们可以使用一个2*3的数组结构来存储变换矩阵: 以最简单的平移变换为例,平移(b1,b2)坐标可以表示为: 因此,平移变换的变换矩阵及逆矩阵记为: 缩放变换:将图像横坐标放大(或缩小)sx倍,纵坐标放大(或缩小)sy倍,变换矩阵及逆矩阵为: 选择变换:图像绕原点逆时针旋转a角,其变换矩阵及逆矩阵(顺时针选择)为: OpenCV中的图像变换函数 基本的放射变换函数: void cvWarpAffine( const CvArr* src,//输入图像 CvArr* dst, //输出图像 const CvMat* map_matrix, //2*3的变换矩阵 int flags=CV_INTER_LINEAR