個人總結-研一上學期
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. 瞭解了計算機動畫關於骨骼提取與線性混合蒙皮的基本原理,知道了一些相關的演算法。