psp2.1
personal software process stages
預估耗時(分鐘)
實際耗時(分鐘)
planning
計畫· estimate
· 估計這個任務需要多少時間
1010
development
開發· analysis
· 需求分析 (包括學習新技術)
3060
· design spec
· 生成設計文件
3030
· design review
· 設計複審 (和同事審核設計文件)00
· coding standard
· **規範 (為目前的開發制定合適的規範)
1010
· design
· 具體設計
3050
· coding
· 具體編碼
6090
· code review
· **複審
6060
· test
· 測試(自我測試,修改**,提交修改)
120120
reporting
報告· test report
· 測試報告
2020
· size measurement
· 計算工作量
1010
· postmortem & process improvement plan
· 事後總結, 並提出過程改進計畫
3040
合計400
500基本問題
直線公式
對於複雜問題而言,我們首先尋求將問題簡化。我們將問題簡化到求兩條直線的交點。
由解析幾何的知識我們知道,通過兩條直線的公式可以求出他們的交點。為了簡化問題,我使用直線的一般式來表示直線: ax+by+c = 0.
a,b,c 可以由題目中給定的兩點座標計算得出(設兩點為 (x_1,y_1),(x_2,y_2) ):
交點的計算方法
通過聯立上述直線公式,我們可以得到兩條直線的交點。
交點x = /
交點y = /
儲存方法
我們選用vector
儲存過程中產生的交點。在所有交點計算完畢後,我們對陣列內元素排序,並去重。
複雜度由於在獲得直線交點時,需要列舉兩條直線的所以可能。所以時間複雜度為o(n^2)。
本設計中包含兩個類(直線、圓)和乙個結構體(座標)。結構體作為座標的資料結構,具有比較等功能。而兩個類中都有和其他物件判斷交點的方法。主函式通過對每個直線、每個圓建立相應物件,再列舉呼叫交點計算方法即可找出所有的交點。
交點
stuct position ;
由於我們在後續需要對交點進行排序和去重處理,所以我構造和poscompare
,posequal
兩個函式來比較兩個交點的大小和是否相等。
直線:在直線類中我們儲存直線一般式的三個引數\(a,b,c\)。
直線可以相交,我們為直線構造相交方法,返回交點結構體。
class line
圓
在圓的類中,我們儲存能夠定位乙個圓的三個引數:\(x,y,r\),即圓心和半徑。
同時圓的類中,包含圓與直線相交、圓與圓相交的方法。
class circle
;
在計算直線和圓的交點時,我們採用了點到直線的距離公式。distance = |ax0+by0+c| / sqrt(a2+b2),如果點到直線的距離大於半徑,則不會有交點,如果小於或等於半徑,則會有0或1個交點。而圓和圓之間的交點,我們採用了向量公式法來進行計算。
在本節中我們對**進行了效能分析。通過隨機生成的2000條直線進行測試。從圖中可以看出,我們**的主要耗時部分在於去重時對**進行的排序操作,佔到了所有消耗的80%左右。對於重複結點的刪除,我們有兩種可以選擇的方法,一種是進入時檢查,即使用set等維護乙個互不重複的結點結合,另一種是輸出時檢查,此時我們需要額外進行去重處理。二者都需要消耗額外的時間,目前還沒有乙個很好地降低時間複雜度的方法。
單元測試設計
單元測試主要針對結點的比較函式和交點的計算方法進行。主要的要求是要考慮所有的情況,例如,要考慮結點比較時可能出現的大於、小於、等於等情況,直線交點計算時的相交、平行、垂直等情況,圓和圓之間的相切、相交、相離等其情況。
消除 code quality analysis 中的所有警告
交點計算方法
這裡直接呼叫公式即可。注意到筆者在這裡整數型別都選取的是long long型,雖然我們的座標值等變數都不會超過int的範圍,但是在整數進行乘法運算時,可能有溢位的風險,所以使用long long能夠更保證程式的正確性。
結構體(位置)比較函式
我們使用結構體struct position
來儲存交點的座標。由於在最後我們需要對這些座標進行去重操作,所以我們需要設定座標的比較函式,判斷二者的大小和相等性。
2020軟工個人專案作業
專案 內容這個作業屬於哪個課程 2020計算機學院軟體工程 羅傑 任健 這個作業的要求在 個人專案作業 教學班級 006專案位址 個人專案作業 psp2.1 personal software process stages 預估耗時 分鐘 實際耗時 分鐘 planning 計畫15 15 estim...
BUAA軟工 個人專案作業
專案 內容這個作業屬於哪個課程 2020春季計算機學院軟體工程 羅傑 任健 北京航空航天大學 計算機學院 這個作業的要求在 個人專案作業 我的教學班級 005這個專案的github位址 psp2.1 personal software process stages 預估耗時 分鐘 實際耗時 分鐘 p...
2020軟工個人專案作業
專案內容 這個作業屬於哪個課程 2020春季計算機學院軟體工程 羅傑 任健 這個作業的要求在 個人專案作業 我在這個課程的目標是 通過這門課鍛鍊軟體開發能力和經驗,強化與他人合作的能力 這個作業在哪個具體方面幫助我實現目標 進一步應用所學的軟體工程知識,構建專案 psp2.1 personal so...