matrix

OpenGL中 Canvas 性能分析

此生再无相见时 提交于 2020-04-06 02:02:44
本文将通过分析部分源码,描述 Android 里面的 Canvas 的大致实现。并且会对 Canvas 的性能做一定分析,提供对 Canvas 的使用建议。 GLES20RecordingCanvas 类 这个类是什么?为什么我从没用过? 我们来看看它的代码: class GLES20RecordingCanvas extends GLES20Canvas { ... } class GLES20Canvas extends HardwareCanvas { ... } public abstract class HardwareCanvas extends Canvas { ... } 它是不暴露给开发者的,所以我们也使用不了它。 而由 extends Canvas 可见,它是 Canvas 的一个实现类,所以应当也提供和 Canvas 一样的功能。那么它在哪里被使用了呢? 它是在 Android framework 源码处的,我们可以自定义一个 view,在 debug 时,断点到 @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); } 就可以看到这个 canvas 的实例是 GLES21RecordingCanvas 了。 也就是说,几乎 Android 的所有 View

07-图6 旅游规划 (25分)

浪子不回头ぞ 提交于 2020-04-04 13:19:53
题目描述 有了一张自驾旅游路线图,你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。 输入格式: 输入说明:输入数据的第1行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0~(N−1);M是高速公路的条数;S是出发地的城市编号;D是目的地的城市编号。随后的M行中,每行给出一条高速公路的信息,分别是:城市1、城市2、高速公路长度、收费额,中间用空格分开,数字均为整数且不超过500。输入保证解的存在。 输出格式: 在一行里输出路径的长度和收费总额,数字间以空格分隔,输出结尾不能有多余空格。 输入样例: 4 5 0 3 0 1 1 20 1 3 2 30 0 3 4 10 0 2 2 20 2 3 1 20 输出样例: 3 40 解题思路 根据题意,可以看出这是一个单源有权图最短路径问题,使用Dijkstra算法解决,需要注意的是本题最短路径的含义是 先比较长度,再比较花费 。 代码 #include <stdio.h> #include <stdlib.h> #define MAXSIZE 500 #define INFINITY 600 typedef struct { int length; int

《剑指offer》— JavaScript(19)顺时针打印矩阵

断了今生、忘了曾经 提交于 2020-03-31 05:00:17
顺时针打印矩阵 题目描述   输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 思路 选坐标为(0,0),(1,1)...的点记为(start,start),作为开始坐标,下一圈开始坐标为(start+1,start+1); 判断是否进入下一圈(即是否打印完成)的条件是rows>start*2 && cols>start*2; 打印一圈的左上角坐标为(start,start),右下角的坐标为(cols-start-1,rows-start-1) 根据一圈左上角和右下角坐标判断“从左到右”,“从上到下”,“从右到左”,“从下到上”需要打印的点。 实现代码 function printMatrix(matrix) { if (matrix == null || matrix.length == 0) { return; } var rows = matrix.length; var cols = matrix[0].length; var start = 0; var result = []; while (cols > start * 2 && rows > start *

机器学习 - 命名实体识别之Hidden Markov Modelling

爱⌒轻易说出口 提交于 2020-03-28 02:06:47
概述 命名实体识别在NLP的应用中也是非常广泛的,尤其是是information extraction的领域。Named Entity Recognition(NER) 的应用中,最常用的一种算法模型是隐式马可夫模型(Hidden Markov Modelling)- HMM。本节内容主要是通过介绍HMM的原理,以及应用HMM来做一个NER的实例演示。 HMM原理解析 在解释HMM的原理之前,先引用几个HMM的基本概念,第一个是就是隐式状态,在本文中用H表示; 第二个就是显式状态,在本文中用大写的英文字母O表示。咱们的HMM的中,就是根据咱们的显式状态O来计算隐式状态H的概率的问题,其中在HMM中有一个基本的前提条件,那就是每一个time step的隐式状态只跟它前一步的的隐式状态有关。具体是什么意思呢,大家看我下面的一幅图片,结合这幅图片来给大家解释 首先observables是大家能直接得到的信息,例如一个句子“小李和王二在天津旅游”,这个就是一个observable的sequence,是咱们能够直接得到的信息;那么咱们如何才能够得到这句话背后所包含的隐式sequences呢?这就是咱们的HMM所要解决的问题了。从上图可以看出hidden states之间是通过transition matrix来连接的,这里咱们也可以很好的看出来每一步的hidden

android Bitmap学习总结

我们两清 提交于 2020-03-26 05:11:25
http://bbs.chinaunix.net/thread-3682769-1-1.html BitMap类: public void recycle()——回收位图占用的内存空间,把位图标记为Dead public final boolean isRecycled() ——判断位图内存是否已释放 public final int getWidth()——获取位图的宽度 public final int getHeight()——获取位图的高度 public final boolean isMutable()——图片是否可修改 public int getScaledWidth(Canvas canvas)——获取指定密度转换后的图像的宽度 public int getScaledHeight(Canvas canvas)——获取指定密度转换后的图像的高度 public boolean compress(CompressFormat format, int quality, OutputStream stream)——按指定的图片格式以及画质,将图片转换为输出流。 format:Bitmap.CompressFormat.PNG或Bitmap.CompressFormat.JPEG quality:画质,0-100.0表示最低画质压缩,100以最高画质压缩

Android Bitmap 和 Canvas详解

混江龙づ霸主 提交于 2020-03-26 05:05:39
位图是我们开发中最常用的资源,毕竟一个漂亮的界面对用户是最有吸引力的。   1. 从资源中获取位图   可以使用BitmapDrawable或者BitmapFactory来获取资源中的位图。   当然,首先需要获取资源:   Resources res=getResources();   使用BitmapDrawable获取位图   使用BitmapDrawable (InputStreamis)构造一个BitmapDrawable;   使用BitmapDrawable类的getBitmap()获取得到位图;   // 读取InputStream并得到位图   InputStreamis=res.openRawResource(R.drawable.pic180);   BitmapDrawable bmpDraw=newBitmapDrawable(is);   Bitmap bmp=bmpDraw.getBitmap();或者采用下面的方式:   BitmapDrawablebmpDraw=(BitmapDrawable)res.getDrawable(R.drawable.pic180);   Bitmapbmp=bmpDraw.getBitmap();使用BitmapFactory获取位图   (Creates Bitmap objects fromvarious

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)旋转呢?则先要将坐标平移到该点,再进行旋转

css3 matrix()矩阵

泪湿孤枕 提交于 2020-03-26 04:53:18
参数 matrix()有六个参数:matrix(a,b,c,d,e,f); 这六个参数组成的矩阵与原坐标矩阵相乘计算坐标; 计算 获取当前元素的所有像素点坐标并计算 x' = ax+cy+e y' = bx+dy+f 简单例子  偏移   坐标公式应该为:x' = x + 偏移量; y‘ = y + 偏移量   套用上面的公式那么应该:a = 1; b = 0;c = 0;d = 1; e = x偏移量;f = y偏移量   matrix(1, 0, 0, 1, x偏移量, y偏移量) 缩放   x' = x*x缩放倍数 ; y’ = y*y缩放倍数   a = x缩放倍数 ; b = 0; c = 0; d = y缩放倍数 ; e = 0; f = 0   matrix(x缩放倍数, 0, 0, y缩放倍数, 0, 0);   如:缩小一半, matirx(0.5,0,0,0.5,0,0);  倾斜   x' = a*x + c*y ; y' = b*x +d*y   a = cosθ; b = sinθ; c = sinθ; d = cosθ; e = 0; f = 0;   matrix(cosθ, sinθ, sinθ, cosθ, 0, 0);   如:要水平倾斜30度,只需计算出cos30°和sin30°的值,作为参数a和c的值 matrix(0.866,0,0.5,1

Android Matrix(坐标矩阵)

天大地大妈咪最大 提交于 2020-03-26 04:50:25
Android Matrix 2016-02-26 14:38:10 介绍 中文名:坐标矩阵 高等数学里有介绍,在图像处理方面,主要是用于平面的缩放、平移、旋转等操作。 在Android里面,Matrix由9个float值构成,是一个3*3的矩阵。最好记住。如下图 各个字段的含义: 上面的 sinX和 cosX,表示旋转角度的 cos值和 sin值,注意,旋转角度是按顺时针方向计算的。 translateX和 translateY表示 x和 y的平移量。 scale是缩放的比例, 1是不变, 2是表示缩放 1/2,这样子。 如何使用 set,pre,post 方法 Matrix调用一系列 set,pre,post 方法时,可视为将这些方法插入到一个队列.当然,按照队列中从头至尾的顺序调用执行. 其中 pre表示在队头插入一个方法, post表示在队尾插入一个方法. 而set表示把当前队列清空,并且总是位于队列的最中间位置. 当执行了一次set后:pre方法总是插入到set前部的队列的最前面,post方法总是插入到set后部的队列的最后面 例一: Matrix m = new Matrix(); m.setRotate(45); m.setTranslate(80, 80); 只有m.setTranslate(80, 80)有效,因为m.setRotate(45);被清除. 例子二:

Extract opposite-diagonal (not off-diagonal) elements of a matrix

左心房为你撑大大i 提交于 2020-03-20 06:18:57
问题 May be this is too simple of a question but I couldn't find a functional answer. How can we extract the opposite diagonal elements of any square matrix in R? In the example below that would be: 7, 2, 8 . r <- matrix(c(1, 5, 8, 1:3, 7:9), 3) 回答1: An approach could be r[(n<-nrow(r))^2-(1:n)*(n-1)] # [1] 7 2 8 ## microbenchmark (matrix(1:1e6,1000)) # Unit: microseconds # expr min lq mean median uq max neval # r[(n<-nr... 26.897 39.0075 65.36835 47.309 85.9345 316.97 100 # diag(r[,... 18070.388