1. 使用C++语言实现了扩展PL/0文法的编译器,可以将PL/0文法的源程序翻译成intel-i386的汇编程序,在汇编器汇编之后,生成的可执行程序,可以在Windows平台上执行。
实现的文法包含的最基本的顺序、分支与循环结构,支持输入输出,实现了可以层次嵌套的函数与过程调用。对源代码支持C语言风格的单行注释与多行注释;字符串的处理方面,包含对转义字符的处理;输出时对输出的表达式进行了类型推断;循环结构支持for循环与while循环,支持continue与break指令;在函数调用的参数传递方式中,实现了值传递与引用传递;在条件判断语句中,实现了对条件或表达式进行与或非操作的复合条件语句的支持。
进行了一些优化:常数表达式的编译时计算、临时变量的重用与回收、复合条件语句中跳转语句的优化、汇编代码生成时对指令条数的优化,稳定性的优化(汇编源文件中的字符串长度测试)。
2. 熟悉了图形学的基本知识,包括坐标系变换、仿射变换、渲染管线;分别实现了基于OpenGL的固定管线与可编程管线的基本图元的变换与渲染,支持漫反射与高光处理;实现了单线程CPU运算的光线追踪算法,支持漫反射、高光、渗色、镜面反射、折射与阴影;实现了基于SIFT特征匹配的全景图拼接程序,其中,自己独立完成了柱面投影,参考网上代码完成了图片拼接,使用网上代码完成了SIFT特征提取、基于KD-Tree的特征匹配以及基于RANSAC的置换矩阵的计算。在实现过程中,了解了SIFT特征的提取方法,大致了解了KD-Tree即RANSAC算法的原理。
3. 自己仿照STL,独立实现了类模板vector与list,以及用到的迭代器(iterator, const_iterator, reverse_iterator, const_reverse_iterator)。
独立实现了一个小的数学运算库,包含3维向量Vector与不定维度的矩阵Matrix。
3. 看了1/3的算法导论,对随机化快速排序、堆排序、二叉树以及平衡二叉树、贪心算法、动态规划有了更好的理解。对哈希表的应用尚有不足,对分支定界法的理解尚有不足。
4. 学习了矩阵理论,了解了SVD与广义逆的应用;了解了矩阵的谱分解;了解了线性变换在不同空间下的关系。
5. 了解了计算机动画关于骨骼提取与线性混合蒙皮的基本原理,知道了一些相关的算法。