般若波罗蜜多心经

观自在菩萨,行深般若波罗蜜多时,照见五蕴皆空,度一切苦厄。舍利子,色不异空,空不异色;色即是空,空即是色。受、想、行、识,亦复如是。舍利子,是诸法空相,不生不灭,不垢不净,不增不减,是故空中无色,无受、想、行、识;无眼、耳、鼻、舌、身、意;无色、声、香、味、触、法;无眼界,乃至无意识界;无无明,亦无无明尽;乃至无老死,亦无老死尽。无苦、集、灭、道,无智亦无得。以无所得故,菩提萨埵,依般若波罗蜜多故,心无罣碍。无罣碍故,无有恐怖,远离颠倒梦想,究竟涅槃。三世诸佛,依般若波罗蜜多故,得阿耨多罗三藐三菩提。故知般若波罗蜜多,是大神咒,是大明咒,是无上咒,是无等等咒,能除一切苦,真实不虚。故说般若波罗蜜多咒,即说咒曰:“揭谛、揭谛,波罗揭谛,波罗僧揭谛,菩提萨婆诃。”



仿射变换与透视变换

仿射变换是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。

基本的图像变换就是二维坐标的变换:从一个二维坐标 \((x, y)\) 到另一个二维坐标 \((u, v)\) 的线性变换:

\begin{split} u = a_{1}x+b_{1}y+c_{1} \\ v = a_{2}x+b_{2}y+c_{2} \end{split}

写成矩阵的形式:

\[\begin{bmatrix} u \\ v \end{bmatrix} = \begin{bmatrix} a_{1} & b_{1} \\ a_{2} & b_{2} \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} + \begin{bmatrix} c_{1} \\ c_{2} \end{bmatrix}\]

\[R=\begin{bmatrix} a_{1} & b_{1} \\ a_{2} & b_{2} \end{bmatrix},t=\begin{bmatrix} c_{1} \\ c_{2} \end{bmatrix},T=\begin{bmatrix} R & t \end{bmatrix}\]

矩阵 \(T\) 就是仿射变换的变换矩阵,\(R\) 为线性变换矩阵,\(t\) 为平移矩阵,简单来说,仿射变换就是线性变换+平移。变换后直线依然是直线,平行线依然是平行线,直线间的相对位置关系不变,因此非共线的三个对应点便可确定唯一的一个仿射变换,线性变换 4 个自由度 + 平移 2 个自由度 →仿射变换自由度为 6。



刚体变换

三维空间坐标的刚体变换可分为旋转和平移两个步骤,用 \(R_{A}^{B} = \begin{bmatrix} u_{x} & v_{x} & w_{x} \\ u_{y} & v_{y} & w_{y} \\ u_{z} & v_{z} & w_{z} \end{bmatrix}\) 表示旋转矩阵,用 \(t_{A}^{B} = \begin{bmatrix} t_{x} \\ t_{y} \\ t_{z} \end{bmatrix}\) 表示平移矩阵。

坐标系A到B刚体变换形式为:

\[\begin{bmatrix} x^{'} \\ y^{'} \\ z^{'} \end{bmatrix} = R_{A}^{B} \ast \begin{bmatrix} x \\ y \\ z \end{bmatrix} + t_{A}^{B}\]

用齐次变换矩阵 \(T_{A}^{B}\) 的表示形式为:

\[\begin{bmatrix} x_{'} \\ y_{'} \\ z_{'} \\ 1 \end{bmatrix} = T_{A}^{B} \ast \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} = \begin{bmatrix} R_{A}^{B} & t_{A}^{B} \\ 0 & 1 \end{bmatrix} \ast \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix}\]



WSL导入导出

默认情况WSL会安装在C盘,可以将其迁移到其他盘,这里使用WSL提供的导入和导出命令。

关闭所有的WSL,查询要导出的名称:

PS > wsl --shutdown
PS > wsl -l -v
  NAME            STATE           VERSION
  Ubuntu-22.04    Stopped         2

将要导出的WSL保存到D盘:

PS > wsl --export Ubuntu-22.04 D:\Ubuntu-22.04.tar


Use tldraw in Vite

Vite is a build tool that aims to provide a faster and leaner development experience for modern web projects. Is consists of two major parts:

  • A dev server that provides rich feature enhancements over native ES modules, for example extremly fast Hot Module Replacement(HMR).
  • A build command that bundles your code with Rollup, pre-configured to output highly optimized static assets for production.

tldraw is a library for creating infinite canvas experiences in React.



C++折叠表达式

折叠表达式(Fold Expressions)是C++17标准引入的,引入折叠表达式的主要目的是计算某个值。这个值的特殊性在于:它与可变参有关,而不是与单独某个可变参有关。换句话说,所有的可变参都参与计算,才能求出该值。在可变参函数模板中,因为展开参数比较麻烦,如果要把传递进来的所有参数加在一起,可能要写很多代码,而通过折叠表达式,只需要一行代码就可以求出所有可变参的和。

template<typename... T>
auto add_val(T... args)
{
    return (... + args);
}

在上面的例子中,return语句后面的括号中就是一个折叠表达式。



C++可变参函数模板

可变参模板的英文为Variadic Templates,是C++11标准引入的,可变参模板允许模板定义中含有0到多个模板参数。

template <typename... T>
void myvtfunct(T... args)
{
    cout << sizeof...(args) << endl;
    cout << sizeof...(T) << endl;
}

typename后面的3个点代表参数包,然后才修饰T。T后面带了3个点,所以将T称为可变参类型,实际上其中包含了0到多个不同的类型(一包类型),args成为一包或一堆参数。



卡尔曼滤波

我不得不说说卡尔曼滤波,因为它能做到的事情简直让人惊叹!意外的是很少有软件工程师和科学家对对它有所了解,这让我感到沮丧,因为卡尔曼滤波是一个如此强大的工具,能够在不确定性中融合信息,与此同时,它提取精确信息的能力看起来不可思议。

什么是卡尔曼滤波

你可以在任何含有不确定信息的动态系统中使用卡尔曼滤波,对系统下一步的走向做出有根据的预测,即使伴随着各种干扰,卡尔曼滤波总是能指出真实发生的情况。

在连续变化的系统中使用卡尔曼滤波是非常理想的,它具有占用内存小的优点(除了前一个状态量外,不需要保留其它历史数据),并且速度很快,很适合应用于实时问题和嵌入式系统。

在Google上找到的大多数关于实现卡尔曼滤波的数学公式看起来有点晦涩难懂,这个状况有点糟糕。实际上,如果以正确的方式看待它,卡尔曼滤波是非常简单和容易理解的,下面我将用漂亮的图片和色彩清晰的阐述它,你只需要懂一些基本的概率和矩阵的知识就可以了。



李白《侠客行》

赵客缦胡缨,吴钩霜雪明。银鞍照白马,飒沓如流星。

十步杀一人,千里不留行。事了拂衣去,深藏身与名。

闲过信陵饮,脱剑膝前横。将炙啖朱亥,持觞劝侯嬴。

三杯吐然诺,五岳倒为轻。眼花耳热后,意气素霓生。

救赵挥金锤,邯郸先震惊。千秋二壮士,烜赫大梁城。

纵死侠骨香,不惭世上英。谁能书阁下,白首太玄经。



Define Emacs Formatter

Steve Purcell has created a package reformatter, which can define commands to format the current Emacs buffer.

The reformatter-define macro expands to code which generates xxx-buffer and xxx-region interactive commands, and a local minor mode called xxx-on-save-mode. The :args and :program expressions will be evaluated at runtime, so they can refer to variables that may have a buffer-local value. A custom variable will be generated for the mode lighter, with the supplied value becoming the default.



苏轼《定风波》

莫听穿林打叶声,何妨吟啸且徐行。竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。

料峭春风吹酒醒,微冷,山头斜照却相迎。回首向来萧瑟处,归去,也无风雨也无晴。



Valar Morghulis. Valar Dohaeris.

Top