cos

【GAMES101-现代计算机图形学课程笔记】Lecture 03 Transformation

限于喜欢 提交于 2020-04-27 02:30:16
1. Why study transformation 1.1 Modeling translation (平移) rotation(旋转) scaling (缩放) projection (投影) 2. 2D transformations: rotation, scale, shear 我们在求解变换矩阵的时候其实只需要去满足一些特殊点即可算出变换矩阵了,而不需要死记硬背一些公式。具体可以看看旋转矩阵的推导示例。 2.1 Scale (缩放变换) 假设原坐标为 \(\left[\begin{array}{l}x \\ y\end{array}\right]\) Scale Matrix (缩放矩阵) 通过左乘一个Scale Matrix可以事先缩放变换,例如下式表示x,y坐标都缩放s倍。 \[\left[\begin{array}{l}x^{\prime} \\ y^{\prime}\end{array}\right]=\left[\begin{array}{ll}s & 0 \\ 0 & s\end{array}\right]\left[\begin{array}{l}x \\ y\end{array}\right] \] Reflection Matrix (反射矩阵) Horizontal reflection \[\left[\begin{array}{l}x^{

如何通过 Github Action 薅腾讯云云开发的羊毛

。_饼干妹妹 提交于 2020-04-26 17:40:54
如何通过 Github Action 薅腾讯云云开发的羊毛 印记中文一直致力于为国内前端开发者提供技术文档的翻译服务,比如 React, Webpack, Node.js 等技术文档,都能有看到印记中文参与的影子。为了让文档的加载速度更好,我们都把文档全数部署在腾讯云国内的 CDN 服务上。不过这也带来了比较大的成本压力,做部署服务买的机器、每几个月要买 TB 级别的 CDN 流量包。 直到最近,腾讯云云开发推出的静态资源部署服务,对于许多文档站、静态个人官网,无论是在部署上,还是价格上,都非常的友好亲民。经过计算发现,比将站点部署在云服务器以及传统的 CDN 更加实惠。这么好的羊毛,不薅天理难容啊! 不过由于印记中文的文档种类多,情况各不相同,经过一番的研究之后,梳理出以下的需求,并且输出了对应的解决方案,希望开放出来给大家针对自身的情况使用。 印记中文的部署需求 需求一:文档个数多,希望可以统一发布方案 由于印记中文的文档不少,至少有 10 个以上,部署的方案需要比较整齐划一才比较好地做维护。之前我们是通过 Node.js 写了一个部署服务,一定程度上减轻了部署的负担,但还是需要在每个文档里,新加入脚本做构建和触发部署。而 Github Action 推出后,完美解决了 Github 项目构建与部署问题,因此基于 Github Action 做一个部署方案是比较好的解决方案。

matlab练习程序(对应点集配准的四元数法)

痞子三分冷 提交于 2020-04-26 15:43:07
这个算是ICP算法中的一个关键步骤,单独拿出来看一下。 算法流程如下: 1.首先得到同名点集P和X。 2.计算P和X的均值up和ux。 3.由P和X构造协方差矩阵sigma。 4.由协方差矩阵sigma构造4*4对称矩阵Q。 5.计算Q的特征值与特征向量。其中Q最大特征值对应的特征向量即为最佳旋转向量q。 6.通过四元数q得到旋转矩阵R。 7.根据R计算最佳平移向量qr。 具体公式我就不贴图了,可以参考这篇 “ ICP算法在点云配准中的应用” 论文的3.1节。 处理效果如下: 原始点集: 其中蓝点为原始点集,红点为旋转平移后的点集。 配准后点集: 计算得到的旋转平移矩阵,通过对蓝点集进行转换得到绿点集,比较红点集与绿点集是否基本一致。 matlab代码如下: clear all; close all; clc; %生成原始点集 X=[];Y=[];Z=[]; for i=-180:2:180 for j=-90:2:90 x = i * pi / 180.0; y = j * pi / 180.0; X =[X,cos(y) * cos(x)]; Y =[Y,sin(y) * cos(x)]; Z =[Z,sin(x)]; end end P=[X(1:3000)' Y(1:3000)' Z(1:3000)']; %生成变换后点集 i=0.5;j=0.3;k=0.7; Rx=[1

【GAMES101-现代计算机图形学课程笔记】Lecture 04 Transformation Cont.

南楼画角 提交于 2020-04-26 08:21:52
1. 3D Transformations 这里再上一节内容的基础上对3D 变换做个补充说明 3D下点和向量表示如下: 3D point \(=(x, y, z, 1)^{\top}\) 3D vector \(=(x, y, z, 0)^{\top}\) Scale \[\mathbf{S}\left(s_{x}, s_{y}, s_{z}\right)=\left(\begin{array}{cccc} s_{x} & 0 & 0 & 0 \\ 0 & s_{y} & 0 & 0 \\ 0 & 0 & s_{z} & 0 \\ 0 & 0 & 0 & 1 \end{array}\right)\] Translation \[\mathbf{T}\left(t_{x}, t_{y}, t_{z}\right)=\left(\begin{array}{cccc} 1 & 0 & 0 & t_{x} \\ 0 & 1 & 0 & t_{y} \\ 0 & 0 & 1 & t_{z} \\ 0 & 0 & 0 & 1 \end{array}\right)\] Rotation 绕x轴旋转 \[\mathbf{R}_{x}(\alpha)=\left(\begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & \cos \alpha & -\sin \alpha &

JavaScript(二)数据类型(一)

自作多情 提交于 2020-04-26 05:16:53
计算机程序的运行需要对值进行操作,在编程语言中值的类型被称作数据类型,编程语言最基本的特性就是能够支持多种数据类型。当程序需要将值保存起来以备将来使用时,便将其赋值给一个变量。变量是一个值的符号名称,可以通过该名称来获得对值的引用。 JavaScript中除了数字、字符串、布尔值、null和undefined之外就是对象了,对象是属性的集合,每个属性都由“键:值”构成。 1、数字 和其它编程语言不同,JavaScript不区分整数值和浮点数值。JavaScript中的所有数字均用浮点数值表示。JavaScript采用IEEE754标准定义的64位浮点格式表示数字,这意味着它能表示的最大值是±1.7976931348623157x10的308次幂,最小值是±5x10的-324次幂。 整数能表示的范围是-9007199254740992-9007199254740992(-2的53次幂到2的53次幂),包含边界值,如果使用了超过此范围的整数,则无法保证低位数的精度。但需要注意的是数组的索引是基于32位的整数。 当一个数字直接出现在JavaScript程序中,称之为数字直接量,JavaScript支持多种格式的数字直接量,注意在任何数字直接量前添加符号(-)可以得到他们的负值。但负号是一元求反运算符,并不是数字直接量语法的组成部分。 1.1整形直接量 除了十进制的整形直接量

R数据挖掘 第五篇:分类(kNN)

浪子不回头ぞ 提交于 2020-04-25 08:36:01
K最近邻(kNN,k-NearestNeighbor)算法是一种监督式的分类方法,但是,它并不存在单独的训练过程,在分类方法中属于惰性学习法,也就是说,当给定一个训练数据集时,惰性学习法简单地存储或稍加处理,并一直等待,直到给定一个检验数据集时,才开始构造模型,以便根据已存储的训练数据集的相似性对检验数据集进行分类。惰性学习法在提供训练数据集时,只做少量的计算,而在进行分类或数值预测时做更多的计算。kNN算法主要用于模式识别,对于随机分布的数据集分类效果较差,对于类内间距小,类间间距大的数据集分类效果好,而且对于边界不规则的数据效果好于线性分类器。常用于推荐系统:推荐受众喜欢电影、美食和娱乐等。 一,kNN算法逻辑 kNN算法的核心思想是:如果一个数据在特征空间中最相邻的k个数据中的大多数属于某一个类别,则该样本也属于这个类别(类似投票),并具有这个类别上样本的特性。通俗地说,对于给定的测试样本和基于某种度量距离的方式,通过最靠近的k个训练样本来预测当前样本的分类结果。 例如,借用百度的一张图来说明kNN算法过程,要预测图中Xu的分类结果,先预设一个距离值,只考虑以Xu为圆心以这个距离值为半径的圆内的已知训练样本,然后根据这些样本的投票结果来预测Xu属于w1类别,投票结果是4:1。 kNN算法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。

matlab中fft快速傅里叶变换

萝らか妹 提交于 2020-04-24 22:50:28
视频来源: https://www.bilibili.com/video/av51932171?t=628 。 博文来源:https://ww2.mathworks.cn/help/matlab/ref/fft.html?searchHighlight=fft&s_tid=doc_srchtitle 视频来源很好的解释了: 1 .傅里叶变换过程,经过傅里叶变化得到了,频率w,振幅a0,相位角φ; 2. 傅里叶变换 主要应用领域: 声音, 图像处理; 博文则很好的解释了: 1. 傅里叶变换在matlab软件中怎样应用 2.. 傅里叶变换的作用效果的展示,从时域到频域的变化,时域难以解决的问题到频域中却很清晰。 语法 Y = fft(X) Y = fft(X,n) Y = fft(X,n,dim) 说明 示例 Y = fft( X ) 用快速傅里叶变换 ( FFT) 算法计算 X 的 离散傅里叶变换 (DFT)。 如果 X 是向量,则 fft(X) 返回该向量的傅里叶变换。 如果 X 是矩阵,则 fft(X) 将 X 的各列视为向量,并返回每列的傅里叶变换。 如果 X 是一个多维数组,则 fft(X) 将沿大小不等于 1 的第一个数组维度的值视为向量,并返回每个向量的傅里叶变换。 示例 Y = fft( X , n ) 返回 n 点 DFT。如果未指定任何值,则 Y 的大小与 X 相同

傅里叶变换通俗解释及快速傅里叶变换的python实现

為{幸葍}努か 提交于 2020-04-24 22:43:15
  通俗理解傅里叶变换,先看这篇文章 傅里叶变换的通俗理解 !   接下来便是 使用python进行傅里叶FFT-频谱分析: 一、一些关键概念的引入 1、离散傅里叶变换(DFT) 离散傅里叶变换(discrete Fourier transform) 傅里叶分析方法是信号分析的最基本方法,傅里叶变换是傅里叶分析的核心,通过它把信号从时间域变换到频率域,进而研究信号的频谱结构和变化规律。但是它的致命缺点是:计算量太大,时间复杂度太高,当采样点数太高的时候,计算缓慢,由此出现了DFT的快速实现,即下面的快速傅里叶变换FFT。 2、快速傅里叶变换(FFT) 计算量更小的离散傅里叶的一种实现方法。详细细节这里不做描述。 3、采样频率以及采样定理 采样频率 :采样频率,也称为采样速度或者采样率,定义了每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。采样频率的倒数是采样周期或者叫作采样时间,它是采样之间的时间间隔。通俗的讲采样频率是指计算机每秒钟采集多少个信号样本。 采样定理 :所谓采样定理 ,又称香农采样定理,奈奎斯特采样定理,是信息论,特别是通讯与信号处理学科中的一个重要基本结论。采样定理指出,如果信号是带限的,并且采样频率高于信号带宽的两倍,那么,原来的连续信号可以从采样样本中完全重建出来。 定理的具体表述为:在进行模拟/数字信号的转换过程中

【matlab】从DFT到FFT的推导

落爺英雄遲暮 提交于 2020-04-24 21:13:11
本文地址 https://www.cnblogs.com/jacob1934/p/10478257.html DFT(离散傅立叶变换)的原理: 要比较两组长度相同的数据的相似性,只需要将两组数据点乘,再求和就行了。 假设两组数据分别为a[N-1:0]和b[N-1:0],他们的相似性(记为函数r(a,b,N)吧)为 r(a,b,N)=a[0]*b[0] + a[1]*b[1] + a[2]*b[2] + ......+ a[N-2]*b[N-2] + a[N-1]*b[N-1]; 如果输入信号为一维数组data,其长度为N,采样率fs=480K。想要求得data的频谱分布,频谱精度为fs/M,也就是输入信号与频率为0*fs/M,1*fs/M,2*fs/M,3*fs/M ...... (M-2)*fs/M,(M-1)*fs/M的波形的相似度。自然是生成长度为N的M组波形,分别与data点乘求和。 那么,测试波形从什么相位开始呢?输入信号中的各个频率也是有相位的,万一相位错了,岂不是都抵消了?! 测试波形干脆用互相正交的cos(x)和sin(x)不就好了!每组抵消部分都能在另一组上体现出来,那怎么算最终结果呢? cos和sin,那不就是水平轴和垂直轴的么!! 那么,输入信号在该频率上的幅度就是cos和sin的平方根,arctan(sin/cos)就是输入信号的相位了。 等等,有点眼熟

基2时抽8点FFT的matlab实现流程及FFT的内部机理

爷,独闯天下 提交于 2020-04-24 20:58:26
前言 本来想用verilog描述FFT算法,虽然是8点的FFT算法,但写出来的资源用量及时延也不比调用FFT IP的好, 还是老实调IP吧,了解内部机理即可,无需重复发明轮子。 参考 https://wenku.baidu.com/view/6f5862997c1cfad6185fa725.html https://blog.csdn.net/shengzhadon/article/details/46737517 流程 FFT能做什么在此就不赘述了,只了解数据的运算流程。 1.FFT的基本公式: 第一眼看这个公式,肯定是脑袋瞬间宕机。 2.旋转因子:记住旋转因子具有可约性,对称性,周期性。 表示方法有两种,通过欧拉公式转换,本质上是一致的。 Wn=exp(-j*2*k*pi/N) ,N表示FFT点数,k表示第几个旋转因子。 Wn = cos(2*pi*k/N) - i*sin(2*pi*k/N) 第二次脑袋瞬间宕机。 3.蝶形图: 好在数学家为了普通人类能理解公式,绘制了帅气的蝴蝶漫画图,8点FFT的如下: 不直观,添加几条辅助线再看:可以看到分为三级蝶形运算。 比如第一级的蝶形运算结果:x0’=x[0]+x[4]*w0,x1’=x[0]-x[4]*w0。其他节点以此类推。 注意-1的位置和旋转因子的位置。注意数据和旋转因子都是复数,这就是说蝶形图中的乘法和加减都是复数运算。