旋转变换

如何处理iOS中照片的方向

自闭症网瘾萝莉.ら 提交于 2020-03-12 19:22:13
使用过iPhone或者iPad的朋友在拍照时不知是否遇到过这样的问题,将设备中的照片导出到Windows上时,经常发现导出的照片方向会有问题,要么横着,要么颠倒着,需要旋转才适合观看。而如果直接在这些设备上浏览时,照片会始终显示正确的方向,在Mac上也能正确显示。最近在iOS的开发中也遇到了同样的问题,将拍摄的照片上传到服务器后,再由Windows端下载该照片,发现手机上完全正常的照片到了这里显示的横七竖八。同一张照片为什么在不同的设备上表现的不同?如何能够避免这种情况?本文将和大家一一解开这些问题。 目录 照片的存储演变 胶片时代 数码时代 方向传感器 EXIF(Exchangeable Image File Format) Orientation iPhone上的情况 验证EXIF Mac平台 Windows平台 开发时如何避免 直观的解决方案 第二种简单的方法 结尾 照片的存储演变 一切都得从相机的发展开始说起。 胶片时代 一般相机拍摄出来的画面都是长方形,在拍摄的那一瞬间,它会将取景器中的场景对应的颜色值存到对应的像素位置。相机本身并没有任何方向的概念,只是使用者想要拍摄的场景在他期望的照片中显示的方式与实际存在差异时,才有了方向一说。如下图,对一个场景F进行拍摄,相机的方向可能会有这样四个常见的角度: 相机是“自私”的,由于相机仅反应真实的场景,它不理解拍摄的内容

方阵逆时针旋转

丶灬走出姿态 提交于 2020-03-12 04:51:42
方阵逆时针旋转 解法一 解法二 今天看到了这样的一道题目,花了一个小时做了一下,用了两种解法,第二种解法空间复杂度为O(1),但思路比较复杂,大家可以一起来讨论一下~ 解法一 对于方阵逆时针旋转,很容易想到的就是找出每一个数的规律,复制多一份额外的空间,然后遍历每一个位置,找出其旋转前的位置。 对于下面的方阵,有n = 3 可以知道旋转后的方阵为 即有下面变换: (0,0) <= (0,2) (1,0) <= (0,1) (2,0) <= (0,0)… 可以抽象出来(i,j)<= (j,n - 1 - i),代码如下: void matrixS ( int a [ length ] [ length ] ) { show ( a ) ; int b [ length ] [ length ] ; for ( size_t i = 0 ; i < length ; i ++ ) { for ( size_t j = 0 ; j < length ; j ++ ) { // 两层for循环,遍历方阵每一个数 b [ i ] [ j ] = a [ j ] [ length - 1 - i ] ; } } printf ( "旋转后:\n" ) ; show ( b ) ; } 有测试结果如下: 解法二 第一种解法时间复杂度O(n),空间复杂度O(n),效率很低,所以有了第二种解法

3B1B微分方程系列笔记(四)

穿精又带淫゛_ 提交于 2020-03-11 02:00:54
该系列为3Blue1Brown微分方程系列视频笔记,原视频可见: https://www.bilibili.com/video/av50290975或https://www.youtube.com/watch?v=p_di4Zn4wz4&list=PLZHQObOWTQDNPOjrT6KVlfJuKtYTftqH6 由于笔者水平有限,文中难免存在一些不足和错误之处,诚请各位批评指正。 1 引言 在 3B1B微分方程系列笔记(三) 中我们介绍了求解热传导公式步骤中的两个条件,偏微分方程本身和边界条件。我们了解到余弦函数可以作为合适的解,但现实中的温度曲线往往与余弦函数相差甚远。因此我们需要将多个余弦函数通过线性组合的方式来拟合温度曲线,因为多个解的线性组合是一个新的方程的解。该篇将介绍拟合的强有力的方式——傅里叶级数。但是该篇笔记并不包含视频内全部知识点,仅包含笔者暂时理解的部分知识点,所以这里强烈建议大家从原视频学习,或者马同学的 如何理解傅里叶级数公式 。 2 理解与求解 傅里叶级数的公式长这个样: \[ \begin{aligned}f(t) &=\frac{a_{0}}{2}+a_{1} \cos (\omega t)+b_{1} \sin (\omega t) \\&+a_{2} \cos (2 \omega t)+b_{2} \sin (2 \omega t) \\&+

图解红黑树

社会主义新天地 提交于 2020-03-10 20:58:14
图解红黑树 一、红黑树的五条规则 红黑树除了符合二叉搜索树的基本规则外,还添加了以下特性: 规则1:节点是红色或黑色的; 规则2:根节点是黑色的; 规则3:每个叶子节点都是黑色的空节点(NIL节点); 规则4:每个红色节点的两个子节点都是黑色的(从每个叶子到根的所有路径上不可能有两个连续的红色节点); 规则5:从任一节点到其每个叶子节点的所有路径都包含相同数目的黑色节点; 红黑树的相对平衡 前面5条规则的约束确保了以下红黑树的关键特性: 从 根到叶子节点 的 最长路径 ,不会超过 最短路径 的 两倍 ; 结果就是这棵树 基本 是平衡的; 虽然没有做到绝对的平衡,但是可以保证在最坏的情况下,该树依然是高效的; 为什么可以做到 最长路径不超过最短路径的两倍 呢? 性质4 决定了路径上不能有两个相连的红色节点; 所以,最长路径一定是红色节点和黑色节点交替而成的; 由于根节点和叶子节点都是黑色的,最短路径可能都是黑色节点,并且最长路径中一定是黑色节点多于红色节点; 性质5 决定了所有路径上都有相同数目的黑色节点; 这就表明了没有路径能多于其他任何路径两倍长。 二、红黑树的三种变换 插入一个新节点时,有可能树不再平衡,可以通过三种方式的变换使树保持平衡: 变色 ; 左旋转 ; 右旋转 ; 2.1.变色 为了重新符合红黑树的规则,需要把 红色 节点变为 黑色 ,或者把 黑色 节点变为 红色 ;

android绘图—Paint path 旋转

这一生的挚爱 提交于 2020-03-05 17:11:10
http://meteor6789.blog.163.com/blog/static/35040733201111193535153/ Piant 看一段代码: mPaint = new Paint(); mPaint.setAntiAlias(true);//锯齿 mPaint.setDither(true);// mPaint.setColor(0xFF385078); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeJoin(Paint.Join.ROUND);//文档上的大概意思是设置连接处 mPaint.setStrokeCap(Paint.Cap.ROUND);//文档上的大概意思是设置帽子 帽子应该是:比如画一条直线,那么cap就是指直线的头Or顶端 mPaint.setStrokeWidth(20);//画笔的粗细 样式 : paint有可以直接画一个矩形、各种圆、三角形等的方法,但是没有设置笔触样式的方法,所以如果想在paint上绑定一个图形,可以参考一下方法: import android.content.Context; import android.graphics.*; import android.graphics.Path.Direction; import android.os.Bundle;

CSS——转换小案例

喜你入骨 提交于 2020-02-27 09:31:57
CSS中的转换:transform 位移 transform:translate(x,y);水平方向x和垂直方向y,值为数字或者百分比 transform:translateX(num);水平方向 transform:translateY(num);垂直方向 转换中位移最大的优点:不影响其他盒子的位置 里面的百分比是参照自身的宽高 旋转 transform:rotate(num deg); 单位为deg 旋转时默认为元素的中心点旋转 变换的中心点 transform-origin:x y;默认为center center x、y的值可以是数值、百分比、方位名词(top left bottom right center) 缩放 transform:scale(x,y); 水平方向(宽),垂直方向(高) transform:scale(num); num>1 为放大倍数 num<1 为缩小倍速 等比列缩放 ,指定宽,高会自适应的等比列的缩放 缩放的优点:不影响其他盒子,可以设置缩放变换的中心点 转换的简写形式 对于转换来说,可以同时进行旋转、缩放、位移的操作,但是这些组合的写法不同,最后变换的结果也是不同的。 转换的简写形式,浏览器解析是从右往左进行解析的 变换的时候,其实坐标轴也是在变换的 * 旋转中,坐标轴也跟着旋转了30度 * 浏览器解析过程:元素先向右平移300px,

Computer Vision_33_SIFT:Object recognition from local scale-invariant features——1999

只谈情不闲聊 提交于 2020-02-25 12:27:08
此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面。对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献。有一些刚刚出版的文章,个人非常喜欢,也列出来了。 33. SIFT 关于SIFT,实在不需要介绍太多,一万多次的引用已经说明问题了。SURF和PCA-SIFT也是属于这个系列。后面列出了几篇跟SIFT有关的问题。 [1999 ICCV] Object recognition from local scale-invariant features [2000 IJCV] Evaluation of Interest Point Detectors [2006 CVIU] Speeded-Up Robust Features (SURF) [2004 CVPR] PCA-SIFT A More Distinctive Representation for Local Image Descriptors [2004 IJCV] Distinctive Image Features from Scale-Invariant Keypoints [2010 IJCV] Improving Bag-of-Features for Large Scale Image Search [2011 PAMI]

进阶之路 | 奇妙的Animation之旅

一世执手 提交于 2020-02-25 00:47:20
笔者在之前进阶之路 | 奇妙的View之旅中,提及View滑动的七种方式的时候简单说到Animation,想必看过的读者们已经对Animation有一个简单的印象。 动画,对于一个APP来说非常重要,现在市面上使用的用户比较多的APP,无一不是采用了各种丰富多彩的动画效果;在应用中善于使用动画,不仅让APP的体验更上一层楼,还能牢牢抓住用户的心! 而作为开发者的我们,一定要对动画有一定深度的了解,在日常的学习或者工作中多多尝试动画,以提高应用程序的美观度和易用性! 什么,你不信动画很重要…反手甩你一个对比视频:过渡动画有多重要? 二.核心知识点归纳 2.1 View动画 View动画(视图动画)分为两部分: 补间动画 帧动画 2.1.1 补间动画 1 基础知识 Q1:主要的变换效果 名称 标签 子类 效果 平移动画 translate TranslateAnimation 移动View 缩放动画 scale ScaleAnimation 放大或缩小View 旋转动画 rotate RotateAnimation 旋转View 透明度动画 alpha AlphaAnimation 改变View的透明度 注意:View动画的View移动只是视觉效果,并不能真正的改变view的位置。 Q2:动画的创建 对于View动画建议采用XML来定义,因为XML可读性更好 创建方法一:通过XML定义

Leetcode-探索 | 旋转数组

落爺英雄遲暮 提交于 2020-02-24 09:57:41
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 示例 1: 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右旋转 1 步: [7,1,2,3,4,5,6] 向右旋转 2 步: [6,7,1,2,3,4,5] 向右旋转 3 步: [5,6,7,1,2,3,4] 示例 2: 输入: [-1,-100,3,99] 和 k = 2 输出: [3,99,-1,-100] 解释: 向右旋转 1 步: [99,-1,-100,3] 向右旋转 2 步: [3,99,-1,-100] 说明: 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。 要求使用空间复杂度为 O(1) 的原地算法。 —————————————————————————————————————————————— 1. 暴力模拟,O(n*k),TLE: 1 class Solution(object): 2 def rotate(self, nums, k): 3 """ 4 :type nums: List[int] 5 :type k: int 6 :rtype: void Do not return anything, modify nums in-place instead. 7 """ 8 extraLattice = 0 9

C# 图像旋转代码

痞子三分冷 提交于 2020-02-23 11:04:05
方法一: public static Bitmap rotateImage(Bitmap b, float angle) { //create a new empty bitmap to hold rotated image Bitmap returnBitmap = new Bitmap(b.Width, b.Height); //make a graphics object from the empty bitmap Graphics g = Graphics.FromImage(returnBitmap); g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; //move rotation point to center of image g.TranslateTransform((float)b.Width / 2, (float)b.Height / 2); //rotate g.RotateTransform(angle); //move image back g.TranslateTransform(-(float)b.Width / 2, -(float)b.Height / 2); //draw passed in image onto graphics