无题
let notes = ['C', 'C#', 'D', 'Eb', 'E', 'F', 'F#', 'G', 'G#', 'A', 'Bb', 'B'];
let octives = ['O1', 'O2', 'O3', 'O4', 'O5', 'O6', 'O7', 'O8'];
function add(notePitch, halfTones) {
let oldNote = notePitch.note;
let oldOctive = notePitch.octive;
let oldDist = octives.indexOf(oldOctive) * 12 + notes.indexOf(oldNote);
let newDist = oldDist + halfTones;
let newOctive = octives[Math.floor(newDist / 12)];
let newNote = notes[newDist % 12];
return {
note: newNote,
...
Latex数学符号整理
一、字母上面的上标输入方法
字母上面的上标输入方法,如表所示,
如\bar{a}表示字母a头上有一横线
实际上a可以为任意LaTex表达式
符号
语法
a^\hat{a}a^
\hat{a}
aˋ\grave{a}aˋ
\grave{a}
aˉ\bar{a}aˉ
\bar{a}
aˇ\check{a}aˇ
\check{a}
a⃗\vec{a}a
\vec{a}
a~\tilde{a}a~
\tilde{a}
a˙\dot{a}a˙
\dot{a}
a¨\ddot{a}a¨
\ddot{a}
a^\widehat{a}a
\widehat{a}
二、希腊字母的输入方法
小写符号
小写符号语法
大写符号
大写符号语法
α\alphaα
\alpha
AAA
A
β\betaβ
\beta
BBB
B
γ\gammaγ
\gamma
Γ\GammaΓ
\Gamma
δ\deltaδ
\delta
Δ\DeltaΔ
\Delta
ϵ\epsilonϵ
\epsilon
EEE
E
ε\varepsilo ...
感受泰勒展开公式
泰勒展开公式定义
f(x)=f(x0)+f′(x0)1!(x−x0)+f′′(x0)2!(x−x0)2+f(3)(x0)3!(x−x0)3+...+f(n)(x0)n!(x−x0)n+Rn(x)f(x)=f(x_0)
+\frac{f'(x_0)}{1!}(x-x_0)
+\frac{f''(x_0)}{2!}(x-x_0)^2
+\frac{f^{(3)}(x_0)}{3!}(x-x_0)^3
+...
+\frac{f^{(n)}(x_0)}{n!}(x-x_0)^n
+R_n(x)
f(x)=f(x0)+1!f′(x0)(x−x0)+2!f′′(x0)(x−x0)2+3!f(3)(x0)(x−x0)3+...+n!f(n)(x0)(x−x0)n+Rn(x)
其中n阶泰勒展开的近似多项式函数与原函数f(x)的误差使用Rn(x)R_n(x)Rn(x)作为误差替代。
拉格朗日余项
Rn(x)=f(n+1)(ε)(n+1)!(x−x0)(n+1)R_n(x)=\frac{f^{(n+1)}(\varepsilon)}{(n+ ...
乐理知识
一般而言琴弦长度与其所发出的频率呈反比。
要使这些不同的音形成音乐,需要定义出相对音高的概念。
目前世界上最通用的音律体系为十二平均律。
十二平均律
音程是两个音之间的频率差距,可以使用音数描述。
频率之比为1:2的两个音之间的音程为纯八度。
十二平均律描述了两个单音间的相对音高关系,它将一个纯八度划分为了12份,每一份为一个半音,两份为一个全音。
十二平均律中相邻的两个音之间的音数为0.5。
从基准音f0f_0f0开始,比它高纯八度的音为2f02f_02f0,其中划分为12份,则包含f0f_0f0与2f02f_02f0音在内总共具有13个音,每相邻两个音之间的频率之比应当相同,呈现出等比数列的规律。若使用fnf_nfn按顺序表示其中的每个音,且f12=2f0f_{12}=2f_0f12=2f0。
令fn=aqnf_n=aq^{n}fn=aqn,分别带入当n=0n=0n=0和n=12n=12n=12时的情况,则有
f0=af12=f0q12=2f0⇒q=2112f_0=a \\
f_{12} = f_0 q^{12} = 2 f_0 \Rightarrow q=2^\ ...
斯涅耳定律推导
本推导将基于费马原理进行推导,费马原理表明:光总是沿着光程为极值(极大、极小或常量)的路径传播的。因此,费马原理也叫光程极端定律。
假设存在两种介质,光在两种介质1和介质2中折射率分别是n1,n2n_1,n_2n1,n2,光线的传播路径经过介质1中的Q点,介质交接的点O,介质2中的P点,其中θ1,θ2\theta_1,\theta_2θ1,θ2分别为入射角和折射角。
光线在两种介质中的传播速度分别为:
{v1=cn1v2=cn2\left\{
\begin{matrix}
v_1=\frac{c}{n_1} \\
v_2=\frac{c}{n_2}
\end{matrix}
\right.
{v1=n1cv2=n2c
其中ccc为真空中的光速。由于光在真空中传播的速度最快,故n1,n2≥1n_1,n_2 \ge 1n1,n2≥1
Q点是一个可动点,我们约束它在沿介质交接的竖直方向上可自由运动,并定义变量x。光程QOP经过的时间T为
T=x2+a2v1+b2+(l−x)2v2T=\frac{\sqrt{x^2+a^2}}{v_1}+\frac{\sqrt{ ...
图形学三大变换
模型变换
错切变换
缩放变换
旋转变换
平移变换
绕任意向量的旋转矩阵公式
R(n,α)=cos(α)I+(1−cos(α))n⋅nT+sin(α)[0−nznynz0−nx−nynx0]R(\mathbf n, \alpha)=cos(\alpha) I + (1-cos(\alpha)) \mathbf n \cdot \mathbf n ^ T + sin(\alpha) \begin{bmatrix}
0 & -n_z & n_y \\
n_z & 0 & -n_x\\
-n_y & n_x & 0
\end{bmatrix}
R(n,α)=cos(α)I+(1−cos(α))n⋅nT+sin(α)⎣⎡0nz−ny−nz0nxny−nx0⎦⎤
推导过程
相机变换
相机变换矩阵的推导
一个相机由以下几部分所构成
相机位置 e⃗\vec ee
相机视线方向g⃗\vec gg
相机的正上方向t⃗\vec tt
在相机的参考系中,定义相机视线方向g⃗\vec gg为相机坐标系的z轴方向
...
使用Rust描述音乐系统并模拟乐器演奏
定义基本音乐元素
音符
音符由绝对音高与时值构成
12345#[derive(Debug, Clone, Copy)]pub struct Note { pub pitch: AbsulateNotePitch, pub duration: NoteDuration,}
音高
音高分为绝对音高与相对音高。
音程
音程可由半音数描述,12个半音音程为一个八度
八度
八度代码定义如下:
12345678910111213141516171819202122232425262728#[derive(Debug, Clone, Copy)]pub enum Octave { O1, O2, O3, O4, O5, O6, O7, O8,}impl From<u8> for Octave { fn from(x: u8) -> Self { match x { 0 => Octave::O1, ...
Docker快速部署prometheus+grafana监控体系
准备
首先确保已经安装了 docker 和 docker-compose
介绍
首先拿出官方的生态架构图简单介绍一下整个体系架构
Prometheus 是整个监控体系的核心,它中包含了时序数据库和 PromQL 查询语言
Exporter 是监控数据收集节点,由 Prometheus 根据配置主动拉取监控数据,Prometheus 官方提供了一些 exporter 如 node-exporter
Grafana 是一个支持多种数据源配置的数据可视化系统,我们需要安装 Grafana 后将 Prometheus 作为数据源进行连接
除此之外 Short-lived jobs 和 Alertmanager 本文暂不涉及
开始搭建
首先可以创建一个文件夹,用于存放搭建过程中涉及到的所有文件,我这里创建一个 moniter 文件夹,后续均在该文件夹中进行操作
Prometheus
创建prometheus.yml
123456789101112# 全局配置global: # 抓取时间周期,默认为1分钟,这里设置为15s scrape_interval: 15s # eval的时 ...
Chapter 8 File system
文件系统的目的是为了组织和存放数据。文件系统通常是为了用户之间和应用程序之间共享数据使用,同时还能够实现持久话存储,以便于数据在重启之后依旧可用。
xv6文件系统提供了类Unix的文件,目录和路径名称,并且存储它的数据在virtio磁盘以持久话数据。文件系统需要解决几个挑战:
文件系统需要在磁盘之上的数据结构来表达树形的目录和文件,能够记录块标识来控制每个文件的内容,记录磁盘上的哪些区域是空闲的。
文件系统必须支持崩溃恢复。这是因为,如果崩溃发生了(如断电),文件系统必须在重启之后仍然能够正常地工作。风险在于崩溃可能会中断一个一连串的的更新,并且在磁盘数据结构上留下不一致性。(例如:一个块既被一个文件所使用又被标记为空闲块)
不同的进程可能在同一时间操作文件系统,所以文件系统的代码必须是 coordinate 来维持 invariants.
访问一个磁盘比访问内存慢几个数量级,所以文件系统对于频繁使用的块必须维护一个内存缓存。
这一章阐述了xv6的文件系统将如何应对这些挑战。
8.1 Overview
xv6文件系统实现被组织成为了7层,如图8.1。
disk层在virtio硬件 ...
[论文翻译] Review of FAT data structure of FAT32 file system
原始 Paper
http://www.computerscijournal.org/dnload/Wasim-Ahmad-Bhat-and-S-M-K-Quadri/OJCSV03I01P161-164.pdf
标题
回顾FAT数据结构,FAT32文件系统
概述
FAT 文件系统是一种最原始,可兼容并且简单的文件系统,它如今仍然在支撑着各种数码设备的运行,比如mini MP3播放器,智能手机和数字相机。由于它的简单性和经典性,这种文件系统几乎被所有的操作系统都支持。这篇论文回顾了FAT数据结构中最基本,最重要的一些设计技巧,约束,规则去构建FAT32文件系统中的块数据结构。
介绍
FAT (文件分配表) 文件系统于20世纪70年代开始发展并且早在20世纪80年代就被微软的MS-DOS操作系统所支持。
它也是包括DR-DOS, FreeDOS, MS-DOS, OS/2(v1.1)和Microsoft Windows (一直到Windows Me)在内的各种操作系统的原生文件系统。
FAT 最初是为了500KB以内的软盘设备而开发的。
随着存储容量的提升,FAT也被增强来支持大 ...