DirectX11龙书学习笔记(2)——长度和单位向量

龙书11是一本3D游戏入门级教程,推荐看完这本书之后去看另一本叫做《Real Time Rendering》的书。

本文仅供个人记录和复习,不用于其他用途

向量的长度

向量的长度等于有向线段的长度,我们用双竖线来表示向量的大小。现在,给出一个向量 $ \vec{u}=(x,y,z) $,由毕达哥拉斯定理(勾股定理)可得到如下求模公式:

不过在某些情况下,我们并不关心向量的长度,只需要用它来表示一个方向。对于这种向量,我们将之称为单位向量,其长度为 1。当我们想要让一个向量具有单位长度时,就需要对该向量进行规范化。我们将向量的每个分量除以该向量的模,得到规范化向量:

如果要验证正确性的话,只需要计算$ |\vec{\hat{u}}| $的长度即可:

关于如何在Hexo中显示数学公式

首先把Hexo默认的渲染器卸载了,换个新的。在Hexo目录下输入以下代码:

npm uninstall hexo-renderer-marked --save
npm install hexo-renderer-kramed --save

然后按照 ../node_modules/kramed/lib/rules/inline.js 的路径,找到 inline.js 这个文件,并进行部分修改:

//escape: /^\\([\\`*{}\[\]()#$+\-.!_>])/,      第11行,将其修改为
escape: /^\\([`*\[\]()#$+\-.!_>])/,
//em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,    第20行,将其修改为
em: /^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,

它取消了该渲染引擎对 \,{,} 的转义,然后再 hexo clean、hexo g 重新部署,即可解决问题。

另外注意一点,对于需要用到 MathJax 公式的文章,要在 Front-matter中 打开 MathJax 开关,例如:

title: DirectX11龙书学习笔记(2)——长度和单位向量

data: 2018-03-08

tags: [DirectX,线性代数,计算机图形学]

mathjax: true

categories: DirectX11龙书学习笔记
---

如果还不能显示,那么就需要到主题配置文件中修改。这里以 Next 主题的 _config.yml 文件为例:

# MathJax Support
mathjax:
  enable: true
  per_page: true
  #cdn: //cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML
  cdn: //cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML

这样,就能够完整的显示出数学公式,不用再添加那些图片了。

MathJax公式语法

下面是一些比较常见的公式语法:

符号 释义 测试用例 最终效果
^ 上标 \$ x^{y^z}=(1+e^x)^{-2xy^w} \$ $x^{y^z}=(1+e^x)^{-2xy^w}$
_ 下标 \$ O_2 \$ $O_2$
\frac{分子}{分母} or 分子 \over 分母 分数 \$ f(x,y,z)=3y^2z(3+\frac{7x+5}{1+y^2}) \$ $ f(x,y,z)=3y^2z(3+\frac{7x+5}{1+y^2}) $
\sqrt[根指数,省略时为2]{被开方数} 开方 \$ \sqrt{2}、\sqrt[3]{9} \$ $ \sqrt{2}、\sqrt[3]{9} $
\ldots 与文本底线对齐的省略号 \$ x_1x_2{\ldots}x_n \$ $ x_1x_2{\ldots}x_n $
\cdots 与文本中线对齐的省略号 \$ x_1x_2{\cdots}x_n \$ $ x_1x_2{\cdots}x_n $
\int_积分下限^积分上限(被积表达式) 积分 \$ \int_1^n{x^2}dx \$ $ \int_1^n{x^2}dx $
\sum_{下标表达式}^{上标表达式} {累加表达式} 累加 \$ \sum_{i=1}^n \frac{1}{i^2} \$ $ \sum_{i=1}^n \frac{1}{i^2} $
\\, or \; or \quad or \qquad 不同宽度的空格 \$ a \, b \mid a \; b \mid a \quad b \mid a \qquad b \$ $ a \, b \mid a \; b \mid a \quad b \mid a \qquad b $
\color{颜色}{文字} 更改文字颜色 \$ \color{red}{红色} \$ $ \color{red}{红色} $
\boldsymbol{x} 斜体加粗 \$ \boldsymbol{ABCD} \$ $ \boldsymbol{ABCD} $
\vec{w} 向量 \$ \vec{w} \$ $ \vec{w} $
\cdot 点乘 \$ \vec{w}\cdot x_{i} \$ $ \vec{w}\cdot x_{i} $
\overrightarrow{AB} 从A到B的向量 \$ \overrightarrow{AB} \$ $ \overrightarrow{AB} $

上述公式都是属于行间公式,如果想要让公式独占一行,那么就可以用 $$ 来表示。

分段函数

如果你想要写分段函数,那么格式为:f(x)=\begin{cases}语句1\\语句2\...\end{cases}
\text{文字}
。当然,公式的中间也可以插入其他的表达式来显示更复杂的函数。

$$
f(n)=\begin{cases}
n/2, & \text{如果$ x<=2 $}\\
3n+1, & \text{如果$ x>2 $}
\end{cases}
$$

效果如下:

矩阵

使用$$\begin{matrix}…\end{matrix}$$来生成矩阵,其中 … 表示的是 LaTeX 的矩阵命令,矩阵命令中每一行以 \\ 结束,矩阵的元素之间用 & 来分隔开。

当然,直接显示其实不太好看,我们可以在矩阵的两旁添加大括号,方法就是将{matrix} 改为{bmatrix}即可。

$$
 \begin{bmatrix}
   1 & 2 & 3 \\
   4 & 5 & 6 \\
   7 & 8 & 9
 \end{bmatrix} \tag{1}
$$

效果如下:

当然你也可以用{Bmatrix}

$$
 \begin{Bmatrix}
   1 & 2 & 3 \\
   4 & 5 & 6 \\
   7 & 8 & 9
 \end{Bmatrix} \tag{2}
$$

矩阵会多出一对花括号:

如果矩阵元素太多,可以使用\cdots $ \cdots $ \ddots $ \ddots $ \vdots $ \vdots $ 等省略符号来定义矩阵。

例如:

$$
 \begin{bmatrix}
  1      & 2      & \cdots & 4      \\
  7      & 6      & \cdots & 5      \\
  \vdots & \vdots & \ddots & \vdots \\
  8      & 9      & \cdots & 0
 \end{bmatrix} \tag{3}
$$

结果如下:

另外,如果你不想要矩阵单独占一行,你可以使用\bigl(\begin{smallmatrix} … \end{smallmatrix}\bigr)

例如:

我们使用矩阵 $\bigl( \begin{smallmatrix} a & b \\ c & d \end{smallmatrix} \bigr)$ 作为因子矩阵,将其...

效果如下:

使用矩阵 $\bigl( \begin{smallmatrix} a & b \\ c & d \end{smallmatrix} \bigr)$ 作为因子矩阵,将其…