亲宝软件园·资讯

展开

个人项目作用

胖胖的毛毛虫 人气:0
# 软工个人项目 |**项目**|**内容**| |:-|:-:| |所属课设:北航2020年春软件工程|[班级博客](https://edu.cnblogs.com/campus/buaa/BUAA_SE_2020_LJ/)| |作业要求:实现一个能求解简单几何形状之间交点的控制台程序。|[作业要求](https://edu.cnblogs.com/campus/buaa/BUAA_SE_2020_LJ/homework/10429)| |个人课程目标|学习一个具备一定规模的软件在生命周期中需要哪些工作,锻炼自己的团队协作能力,并使自己具有开发一个“好软件”的能力| |教学班级|006| |这个作业在哪个具体方面帮助我实现目标|提升个人的软件工程能力| |项目地址|https://github.com/NSun-S/SoftwareEngineering_PersonalWork| ## PSP估算 > 在开始实现程序之前,在下述 PSP 表格记录下你估计将在程序的各个模块的开发上耗费的时间。(0.5') > 在你实现完程序之后,在下述 PSP 表格记录下你在程序的各个模块上实际花费的时间。(0.5') |PSP2.1|Personal Software Process Stages|预估耗时(分钟)|实际耗时(分钟)| |:-:|:-:|:-:|:-:| |Planning|计划|20|10| |Estimate| 估计这个任务需要多少时间|20|10| |Development|开发|630|510| |Analysis| 需求分析 (包括学习新技术)|60|30| |Design Spec| 生成设计文档|40|30| |Design Review| 设计复审 (和同事审核设计文档)|0|0| |Coding Standard| 代码规范 (为目前的开发制定合适的规范)|20|20| |Design| 具体设计|60|80| |Coding| 具体编码|120|150| |Code Review| 代码复审|30|20| |Test| 测试(自我测试,修改代码,提交修改)|60|80| |Reporting|报告|60|50| |Test Report| 测试报告|20|20| |Size Measurement| 计算工作量|10|10| |Postmortem & Process Improvement Plan| 事后总结, 并提出过程改进计划|30|20| ||合计|650|520| 在任务完成后回顾这个表格,我发现我做得还算不错,总体时间小于预估,但是debug的时间较长,这也是测试花费大量时间的原因。 ## 思路及设计 在拿到题目之后,我很快定位出这是一道代数几何题,我们需要用自己学过的平面图形的相关知识来求解问题,这个问题分为3部分:直线和直线的交点,圆和圆的交点以及圆和直线的交点。 因此,我先是在纸上进行了演算,直线和直线的交点很好推理,圆和圆的可以转换圆和直线的交点,那么我们求解的关键就是圆和直线的交点,因此我查阅了求解这个问题的[相关资料](https://blog.csdn.net/sinat_25911307/articlehttps://img.qb5200.com/download-x/details/86598780),找到了解决办法。 ## 设计实现过程 这部分完成的比较轻松,因为有面向对象的基本知识,所以在这到题中,我自然的设计了两个类,圆和直线。 ![](https://img2020.cnblogs.com/blog/1615693/202003/1615693-20200310185102900-1896158698.png) 上图是直线类的定义,我们可以看出,其中包含了确定直线的两个点的坐标,以及一个用来求解直线和直线交点的函数。 ![](https://img2020.cnblogs.com/blog/1615693/202003/1615693-20200310185212300-198783421.png) 上图是圆类的定义,其中包含圆的中心点和半径,此外,还有计算垂足,计算直线到圆的距离以及求解圆和直线交点以及圆和圆交点的函数,单元测试中我主要测试了各种类型的直线之间交点的例子。 ## 改进程序性能 这个过程经历了两个阶段: 1. 使用set存放pair作为数据结构,利用set的不重复性来求解。 2. 使用vector存放pair作为数据结构,最后对vector进行去重。 ![](https://img2020.cnblogs.com/blog/1615693/202003/1615693-20200310185228820-1738160281.png) ![](https://img2020.cnblogs.com/blog/1615693/202003/1615693-20200310185553539-1582891056.png) 上面两张图是我们阶段1分别用随机生成的1000条直线(约50w交点)和3000条直线(约450w交点)测试cpu的截图,从中我们可以看出,随着交点个数以近$n^2$的比例增长,时间也大幅度的增长。 ![](https://img2020.cnblogs.com/blog/1615693/202003/1615693-20200310185300933-1793797318.png) 上图是3000条指令是对应的时间消耗占比,我们可看出,对set的操作花费了大量的时间。以下是其中消耗时间最长的函数: ``` bool line::intersect(line line2, set

加载全部内容

相关教程
猜你喜欢
用户评论