矩阵变换

Android OpenGL学习笔记

与世无争的帅哥 提交于 2020-01-03 08:38:38
1、什么是 OpenGL?   OpenGL是个专业的3D程序接口,是一个功能强大,调用方便的底层3D图形库。OpenGL 的前身是 SGI 公司为其图形工作站开的 IRIS GL。IRIS GL 是一个工业标准的3D图形软件接口,功能虽然强大但是移植性不好,于是SGI公司便在 IRIS GL 的基础上开发 OpenGL。 2、OpenGL 的发展历程   1992年7月发布了OpenGL 1.0 版本,并与微软共同推出 Windows NT 版本的 OpenGL 。   1995年 OpenGL 1.1 版本面市,加入了新功能,并引入了纹理特性等等。   一直到2009年8月Khronos小组发布了OpenGL 3.2,这是一年以来OpenGL进行的第三次重要升级。 3、OpenGL ES 简介 Android 3D 引擎采用的是OpenGL ES。OpenGL ES是一套为手持和嵌入式系统设计的3D引擎API,由Khronos公司维护。在PC领域,一直有两种标准的3D API进行竞争,OpenGL 和 DirectX。一般主流的游戏和显卡都支持这两种渲染方式,DirectX在Windows平台上有很大的优势,但是 OpenGL 具有更好的跨平台性。 由于嵌入式系统和PC相比,一般说来,CPU、内存等都比PC差很多,而且对能耗有着特殊的要求,许多嵌入式设备并没有浮点运算协处理器

OpenGL ES学习笔记(二)——平滑着色、自适应宽高及三维图像生成

喜夏-厌秋 提交于 2020-01-01 21:58:26
首先申明下,本文为笔者学习《OpenGL ES应用开发实践指南(Android卷)》的笔记,涉及的代码均出自原书,如有需要,请到原书指定 源码地址 下载。 《 Android学习笔记——OpenGL ES的基本用法、绘制流程与着色器编译 》中实现了OpenGL ES的Android版HelloWorld,并且阐明了OpenGL ES的绘制流程,以及编译着色器的流程及注意事项。本文将从现实世界中图形显示的角度,说明OpenGL ES如何使得图像在移动设备上显示的更加真实。首先,物体有各种颜色的变化,在OpenGL ES中为了生成比较真实的图像,对图像进行平滑着色是一种常见的操作。其次,移动设备存在横竖屏的切换,进行图像显示时,需要根据屏幕方向考虑屏幕的宽高比,使图像不因屏幕切换而变形。最后,现实中的物体都是三维的,我们观察物体都带有一定的视角,因此需要在OpenGL ES实现三维图像的显示。本文主要包括以下内容: 平滑着色 自适应宽高 三维图像生成 一、平滑着色 平滑着色是通过在三角形的每个点上定义不同的颜色,在三角形的表面混合这些颜色得到的。那么,如何用三角形构成实际物体的表面呢?如何混合定义在顶点出的不同颜色呢? 首先引入三角形扇的概念。以一个中心顶点作为起始,使用相邻的两个顶点创建第一个三角形,接下来的每个顶点都会创建一个三角形,围绕起始的中心点按扇形展开。为了使扇形闭合

烧脑!CMU、北大等合著论文真的找到了神经网络的全局最优解

笑着哭i 提交于 2019-12-27 07:16:50
烧脑!CMU、北大等合著论文真的找到了神经网络的全局最优解 机器之心 ​ 已认证的官方帐号 811 人赞同了该文章 选自arXiv,作者:Simon S. Du、Jason D. Lee、Haochuan Li、Liwei Wang、Xiyu Zhai,机器之心编译,参与:思源、王淑婷、张倩。 一直以来,我们都不知道为什么深度神经网络的损失能降到零,降到零不代表着全局最优了么?这不是和一般 SGD 找到的都是局部极小点相矛盾么?最近 CMU、北大和 MIT 的研究者分析了深层全连接网络和残差网络,并表示使用梯度下降训练过参数化的深度神经网络真的能找到全局最优解。 用一阶方法训练的神经网络已经对很多应用产生了显著影响,但其理论特性却依然是个谜。一个经验观察是,即使优化目标函数是非凸和非平滑的,随机初始化的一阶方法(如随机梯度下降)仍然可以找到全局最小值(训练损失接近为零),这是训练中的第一个神秘现象。令人惊讶的是,这个特性与标签无关。在 Zhang 等人的论文 [2016] 中,作者用随机生成的标签取代了真正的标签,但仍发现随机初始化的一阶方法总能达到零训练损失。 人们普遍认为过参数化是导致该现象的主要原因,因为神经网络只有具备足够大的容量时才能拟合所有训练数据。实际上,很多神经网络架构都高度过参数化。例如,宽残差网络(Wide Residual Network)的参数量是训练数据的

机器学习之降维方法

≯℡__Kan透↙ 提交于 2019-12-26 19:06:05
数据降维的 目的 :数据降维,直观地好处是维度降低了,便于计算和可视化,其更深层次的意义在于有效信息的提取综合及无用信息的摈弃。 数据降维的 好处 :降维可以方便数据可视化+数据分析+数据压缩+数据提取等。 降维方法 __ 属性选择 :过滤法;包装法;嵌入法;       | _ 映射方法 _ 线性映射方法:PCA、LDA、SVD分解等             | _ 非线性映射方法:                       |__核方法:KPCA、KFDA等                       |__二维化:                       |__流形学习:ISOMap、LLE、LPP等。             | __ 其他方法:神经网络和聚类 PCA方法简介   主成分分析的思想,就是线性代数里面的K-L变换,就是在均方误差准则下失真最小的一种变换。是将原空间变换到特征向量空间内,数学表示为Ax=λx。   PCA优缺点:   优点:1)最小误差。2)提取了主要信息   缺点:1)计算协方差矩阵,计算量大 LDA方法简介 (1)LDA核心思想:往线性判别超平面的法向量上投影,使得区分度最大(高内聚,低耦合)。   (2)LDA优缺点:   优点:1)简单易于理解   缺点:2)计算较为复杂 (3)问题 之前我们讨论的PCA、ICA也好,对样本数据来言

面试官问你斐波那契数列的时候不要高兴得太早

£可爱£侵袭症+ 提交于 2019-12-23 02:11:17
原文地址:https://www.yanbinghu.com/2019/01/07/16863.html 前言 假如面试官让你编写求斐波那契数列的代码时,是不是心中暗喜?不就是递归么,早就会了。如果真这么想,那就危险了。 递归求斐波那契数列 递归,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。 斐波那契数列的计算表达式很简单: F(n) = n; n = 0,1F(n) = F(n-1) + F(n-2),n >= 2; 因此,我们能很快根据表达式写出递归版的代码: /*fibo.c*/#include <stdio.h>#include <stdlib.h>/*求斐波那契数列递归版*/unsigned long fibo(unsigned long int n){ if(n <= 1) return n; else return fibo(n-1) + fibo(n-2);}int main(int argc,char *argv[]){ if(1 >= argc) { printf("usage:./fibo num\n"); return -1; } unsigned long n = atoi(argv[1]); unsigned long fiboNum = fibo(n); printf("the %lu result is %lu\n",n

分析android动画模块

限于喜欢 提交于 2019-12-22 00:00:13
Tween 动画通过对 View 的内容完成一系列的图形变换 (包括平移、缩放、旋转、改变透明度)来实现动画效果。 具体来讲,预先定义一组指令,这些指令指定了图形变换的类型、触发时间、持续时间。这些指令可以是以 XML 文件方式定义,也可以是以源代码方式定义。程序沿着时间线执行这些指令就可以实现动画效果。 动 画的进度使用 Interpolator 控制,android 提供了几个 Interpolator 子类,实现了不同的速度曲线,如LinearInterpolator 实现了匀速效果、 Accelerateinterpolator 实现了加速效果、DecelerateInterpolator 实现了减速效果等。还可以定义自己的 Interpolator 子类,实现抛物线、自由落体等物理效果。 动画的运行模式有两种: 独占模式,即程序主线程进入一个循环,根据动画指令不断刷新屏幕,直到动画结束; 中断模式,即有单独一个线程对时间计数,每隔一定的时间向主线程发通知,主线程接到通知后更新屏幕; 图形变换通过仿射矩阵实现。图形变换是图形学中的基本知识。简单来说就是,每种变换都是一次矩阵运算。在 Android 中,Canvas 类中包含当前矩阵,当调用 Canvas.drawBitmap (bmp, x, y, Paint) 绘制时,android 会先把 bmp 做一次矩阵运算

数学统计基础-线形代数

纵然是瞬间 提交于 2019-12-21 10:17:10
1、概念 线性(linear)指量(变量)与量(变量)之间按比例、成直线关系,在数学上可以理解为一阶导数为常数的函数;而非线性(non-linear)是指不成比例、没有直线关系,一阶导数不是常数的函数。 线性代数中的基本量指的是向量,基本关系是严格的线性关系;也就是可以简单的将线性代数理解为向量与向量之间的线性关系的映射。 2、向量(有大小和方向) 向量的运算: 正交向量 3、矩阵的各种类型 左行右列,行*列的意思 矩阵相等: 方阵: 负矩阵、上三角矩阵、下三角矩阵 对角矩阵: 单位矩阵: 对称矩阵: 4、矩阵的各种运算 矩阵的加减: 矩阵的乘法: 数乘:将数λ与矩阵A相乘,就是将数λ与矩阵A中的每一个元素相乘,记作λA;结果C=λA 矩阵与向量的乘法 另一种是分别相乘再相加 矩阵的转置--行和列互换 方阵的行列式 5、行列式计算方法 去掉第一行第一列剩余的称为余子式 行列式计算降维计算更方便 a(i,1)的乘以余子式A(j,1),若i!=j代表乘以其他行列的余子式,该乘积为零 行列式的性质: 6、伴随矩阵和可逆矩阵 伴随矩阵 7、矩阵的运算规律 8、矩阵的初等变换 矩阵的初等变换 9、矩阵的秩 10、向量组 11、线性方程组的求解(齐次方程&非齐次方程) 特殊解+通解 非齐次方程的解 特解 和 通解 令b=0求基础解决 非齐次方程的通解=齐次方程的通解+非齐次方程的特解 12

WPF 画一个3D矩形并旋转

纵饮孤独 提交于 2019-12-15 21:13:49
具体的代码还是线性代数。 主要是旋转和平移。 这个例子的中模型是在世界原点建立。所以旋转会以自身轴心旋转。 如果不在世界原点建立模型,还想以自身为旋转轴旋转。 则是需要以下步骤: 模型的中心点为V1(100,100,0)假设中心为轴(平行于Y轴),旋转A度,也就是说自身中心点的Y轴旋转。 步骤: (1)v1平移到世界原点后其他八个顶点的坐标。(中心点坐标的三个参数如果是大于0就是(每个)顶点减去相对应XYZ,如果中心点坐标的三个参数如果是小于0,则是(每个)顶点加上相对应XYZ,或者使用平移矩阵) (2)(每个)顶点先是平移到V1在原点时的所在的位置,再使用旋转矩阵经行旋转 (3) (每个)旋转后的顶点在平移回中心点原先所在位置。 ATP 附加属性类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Media; using System.Windows.Media.Media3D; using

【CCF】201503-1图像旋转

感情迁移 提交于 2019-12-15 12:13:39
试题编号 : 201503-1 试题名称 : 图像旋转 时间限制 : 5.0s 内存限制 : 256.0MB 问题描述 :   旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度。   计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。 输入格式   输入的第一行包含两个整数n, m,分别表示图像矩阵的行数和列数。   接下来n行每行包含m个整数,表示输入的图像。 输出格式   输出m行,每行包含n个整数,表示原始矩阵逆时针旋转90度后的矩阵。 样例输入 2 3 1 5 3 3 2 4 样例输出 3 4 5 2 1 3 评测用例规模与约定   1 ≤ n, m ≤ 1,000,矩阵中的数都是不超过1000的非负整数。    解题思路:基本的数组逆置操作,可以找出变换规律。下面是通过的满分代码: # include <stdio.h> # include <stdlib.h> int a [ 1000 ] [ 1000 ] ; int main ( ) { int m , n , i , j ; scanf ( "%d%d" , & m , & n ) ; for ( i = 0 ; i < m ; i ++ ) for ( j = 0 ; j < n ; j ++ ) scanf ( "%d" , & a [ i ] [ j

【Unity Shader】效果公式总结

会有一股神秘感。 提交于 2019-12-14 19:01:47
a.漫反射公式: diff=C*max(0,cos<L,N>);//C是颜色和强度_LightColor0.rgb 代码: diff=max(0,dot(i.normal,i.lightDir))//i的单位向量and单位法向量 c=tex2D(tex,i.uv) _LightColor0 diff//_LightColor0表示的是场景中平行光的颜色和强度 b.高光反射公式: Spec=pow(max(0,cos(R,V),gloss))//R 单位反射向量reflect(ray,normal)函数获取,V视线单位方向向量 ,gloss光色度 代码: Spec=pow(max(0),dot(reflect(-i.lightDir,i.normal),32)) c=c**_LightColor0*(diff+Spec) 纹理 uv坐标是顶点存储了图片上的坐标 _MainTex (“Main Tex”, 2D) = “white” {} sampler2D _MainTex; float4 _MainTex_ST;//Unity中 纹理_ST来默认声明该纹理的属性_MainTex_ST.xy表示Scale, Till缩放,_MainTex_ST.zw表示Transform 偏移 o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);/