旋转变换

对AVL树和红黑树的个人理解

萝らか妹 提交于 2020-04-08 10:48:10
都说编程算法很重要,可真没见几个.NET程序员研究算法的。这些日子非主流地研究了一些小算法,红黑树和AVL树算是其中复杂的了,但实际也就二三百行代码。悲催的是,网上根本找不到C#的理想版本(包括国外网站),寥寥几个,要么有错,要么非主流的实现方式。 所谓主流方式,就是用表二叉排序树节点TreeNode类的属性,除了左右子节点和值,还包括父节点。 /// <typeparam name="T">Type of the node.</typeparam> /// <typeparam name="K">Type of the node value.</typeparam> class TreeNode<T,K> where T:TreeNode<T,K> where K: IComparable<K> { public T LeftChild { get; set; } public T RightChild { get; set; } public T Parent { get; set; } public K Value { get; set; } } 不同二叉排序树间,为了保证查找性能,在插入和删除时,有不同的调整步骤。表示二叉排序树用抽象类Tree,我们可以把插入和删除节点做成内部虚方法,供公共方法调用(参数是要添加或删除的值)。 比如删除: public bool

转【完整版】如果看了此文你还不懂傅里叶变换,那就过来掐死我吧

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

傅里叶分析之掐死教程(完整版)

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

Android Animation学习笔记

泄露秘密 提交于 2020-03-31 16:30:13
原文地址: http://www.cnblogs.com/feisky/archive/2010/01/11/1644482.html 关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式: 1. Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种渐变动画; 2. Frame Animation:顺序播放事先做好的图像,是一种画面转换动画。 动画类型 下面先来看看Android提供的动画类型。Android的animation由四种类型组成 在XML文件中: alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动画效果 在Java 源码中定义了相应的类,可以使用这些类的方法来获取和操作相应的属性: AlphaAnimation渐变透明度动画效果 ScaleAnimation渐变尺寸伸缩动画效果 TranslateAnimation画面转换位置移动动画效果 RotateAnimation画面转移旋转动画效果 Tween Animation 一个tween动画将对视图对象中的内容进行一系列简单的转换(位置,大小,旋转,透明性)。如果你有一个文本视图对象,你可以移动它,旋转它

Matrix学习——基础知识

陌路散爱 提交于 2020-03-26 04:56:27
以前在线性代数中学习了矩阵,对矩阵的基本运算有一些了解,前段时间在使用GDI+的时候再次学习如何使用矩阵来变化图像,看了之后在这里总结说明。 首先大家看看下面这个3 x 3的矩阵,这个矩阵被分割成4部分。为什么分割成4部分,在后面详细说明。 首先给大家举个简单的例子:现设点P0(x0, y0)进行平移后,移到P(x,y),其中x方向的平移量为△x,y方向的平移量为△y,那么,点P(x,y)的坐标为: x = x0 + △x y = y0 + △y 采用矩阵表达上述如下: 上述也类似与图像的平移,通过上述矩阵我们发现,只需要修改矩阵右上角的2个元素就可以了。 我们回头看上述矩阵的划分: 为了验证上面的功能划分,我们举个具体的例子:现设点P0(x0 ,y0)进行平移后,移到P(x,y),其中x放大a倍,y放大b倍, 矩阵就是: ,按照类似前面“平移”的方法就验证。 图像的旋转稍微复杂:现设点P0(x0, y0)旋转θ角后的对应点为P(x, y)。通过使用向量,我们得到如下: x0 = r cosα y0 = r sinα x = r cos(α+θ) = x0 cosθ - y0 sinθ y = r sin(α+θ) = x0 sinθ + y0 cosθ 于是我们得到矩阵: 如果图像围绕着某个点(a ,b)旋转呢?则先要将坐标平移到该点,再进行旋转

傅里叶分析之掐死教程

无人久伴 提交于 2020-03-25 13:07:48
作 者:韩 昊 知 乎:Heinrich 微 博:@花生油工人 知乎专栏:与时间无关的故事 谨以此文献给大连海事大学的吴楠老师,柳晓鸣老师,王新年老师以及张晶泊老师。 文章来源: https://zhuanlan.zhihu.com/p/19763358 转载的同学请保留上面这句话,谢谢。如果还能保留文章来源就更感激不尽了 . 目录 一、什么是频域 二、傅里叶级数(Fourier Series)的频谱 三、傅里叶级数(Fourier Series)的相位谱 四、傅里叶变换(Fourier Transformation) 五、宇宙耍帅第一公式:欧拉公式 六、指数形式的傅里叶变换 我保证这篇文章和你以前看过的所有文章都不同,这是12年还在果壳的时候写的,但是当时没有来得及写完就出国了……于是拖了两年,嗯,我是拖延症患者…… 这篇文章的核心思想就是: 要让读者在不看任何数学公式的情况下理解傅里叶分析 。 傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维模式。但不幸的是,傅里叶分析的公式看起来太复杂了,所以很多大一新生上来就懵圈并从此对它深恶痛绝。老实说,这么有意思的东西居然成了大学里的杀手课程,不得不归咎于编教材的人实在是太严肃了。(您把教材写得好玩一点会死吗?会死吗?)所以我一直想写一个有意思的文章来解释傅里叶分析,有可能的话高中生都能看懂的那种。所以

Android Animation学习笔记

霸气de小男生 提交于 2020-03-23 07:16:41
关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式: 1. Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种渐变动画; 2. Frame Animation:顺序播放事先做好的图像,是一种画面转换动画。 动画类型 下面先来看看Android提供的动画类型。Android的animation由四种类型组成 在XML文件中: alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动画效果 在Java 源码中定义了相应的类,可以使用这些类的方法来获取和操作相应的属性: AlphaAnimation渐变透明度动画效果 ScaleAnimation渐变尺寸伸缩动画效果 TranslateAnimation画面转换位置移动动画效果 RotateAnimation画面转移旋转动画效果 Tween Animation 一个tween动画将对视图对象中的内容进行一系列简单的转换(位置,大小,旋转,透明性)。如果你有一个文本视图对象,你可以移动它,旋转它,让它变大或让它变小,如果文字下面还有背景图像,背景图像也会随着文件进行转换。 使用XML来定义Tween Animation

《Computer Vision:Algorithms and Applications》学习笔记(一)——图像旋转算法与实现

∥☆過路亽.° 提交于 2020-03-22 21:20:53
昨天和今天学习了《Computer Vision:Algorithms and Applications》中第二章“Image formation”前半部分,主要是如何表示2D、3D图像中的点、线、面等,以及如何用公式推导出2D图形的几何变换,如位移、旋转、放缩、仿射变换、投射等,如下图所示: 一、图像旋转方法简介 其中的图像旋转是一种常用的数字图像处理技术。由于旋转后图像像素点坐标不再是整数,所以旋转后必须对新的像素点灰度值进行插值运算。目前常用的方法有最近邻插值法、线性插值法和样条插值法。文献介绍,最近邻法速度快,方法简单,但生成图像效果较差;样条插值法计算精度高,效果好,但计算复杂,速度较慢;线性插值法(E.g. 双线性插值法)效果较好,运行时间较短。另外,实现赋值的方法分为正向映射法和反向映射法:正向映射法是指,从原始图像坐标出发,计算出在旋转图像上坐标,然后将原始图像该坐标的灰度值赋给对应旋转图像该坐标点;反向映射法则反之。 本文将分别采用基于最近邻取值的正向映射法、基于最近邻取值的反向映射法、基于双线性插值的反向映射法实现图像旋转,并对比三种方法的效果。 二、本文方法 1. 基于最近邻取值的正向映射法 这种方法最简单,也最直观,先考虑图像旋转原理: 以顺时针旋转为例来堆到旋转变换公式。如下图所示。 旋转前: x 0 =rcosb ; y 0 =rsinb 旋转 a

七、图形与图像处理(1)

旧时模样 提交于 2020-03-17 07:44:05
1 使用简单图片 2 绘图 3 图形特效处理 4 逐帧(Frame)动画 5 补间(Tween)动画 6 属性动画 7 使用SurfaceView实现动画 1、Bitmap和BitmapFactory Bitmap代表一张位图,BitmapDrawable里封装的图片就是一个Bitmap对象。开发者为了把一个Bitmap对象包装成 BitmapDrawable对象。可以调用BitmapDrawable的构造器: // 把一个Bitmap对象包装成BitmapDrawable对象 BitmapDrawable drawable = new BitmapDrawable(bitmap); 如果需要获取BitmapDrawable所包装的Bitmap对象,则可调用BitmapDrawable的getBitmap(),如下代码所示: // 获取一个BitmapDrawable所包装的Bitmap对象。 Bitmap bitmap = drawable.getBitmap(); 除此之外,Bitmap还提供了一些静态方法来创建新的Bitmap对象,例如如下常用方法。 ● createBitmap(Bitmap source, int x, int y, int width, int height): 从源位图source的指定坐标点(给定x、y)开始,从中"挖取"宽width

图像矫正-基于opencv实现

只谈情不闲聊 提交于 2020-03-16 02:26:33
一、引言 上篇文章中四种方法对图像进行倾角矫正都非常有效。Hough变换和Radon相似,其抗干扰能力比较强,但是运算量大,程序执行慢,其改进方法为:我们可以不对整幅图像进行操作,可以在图像中选取一块(必须含有一条与倾角有关的直线)进行操作,从而减小运算量。这里Hough变换法和Radon变换法进行倾角检测的最大精度为1度。它们的优点是可以计算有断点的直线的倾角。最小二乘法的优点就是运算量小,但是其抗干扰能力比较差,容易受到噪声的影响。两点法虽然理论简单,但由于采样点比较多而且这些点服从随机分布,计算均值后能有效抑制干扰,实验表明其矫正效果很好,最大精度可以明显小于1度,而且计算量也很小。最小二乘法和两点法不能计算有断点的直线倾角,这是这两种方法的缺点。 二、基于opencv的图像矫正实现 对图像进行旋转矫正,关键是获取旋转角度是多少,在获取旋转角度后,可以用仿射变换对图像进行矫正。本文是基于opencv的houghline变换实现的图像旋转角度获取,具体代码为: _grayimage = cv2.cvtColor(self._srcimage,cv2.COLOR_RGB2GRAY) _cannyimage = cv2.Canny(_grayimage,CANNY_LOW_THRESHOLD, CANNY_HIGH_THRESHOLD, apertureSize=3) lines