个人项目作业

一、概述

项目 内容
这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健)
这个作业的要求在哪里 作业要求
班级 006
项目地址 https://github.com/c2170/personal_program

## 二、PSP 表格
Psp2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划
· Estimate · 估计这个任务需要多少时间 10 5
Development 开发
· Analysis · 需求分析 (包括学习新技术) 30 40
· Design Spec · 生成设计文档 15 10
· Design Review · 设计复审 (和同事审核设计文档) 10 5
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 15 15
· Design · 具体设计 30 20
· Coding · 具体编码 100 120
· Code Review · 代码复审 20 20
· Test · 测试(自我测试,修改代码,提交修改) 100 200
Reporting 报告
· Test Report · 测试报告 30 20
· Size Measurement · 计算工作量 15 10
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 15 15
合计 390 480

## 三、解题思路

思考过程

对于这道题目,我的想法比较直接,就是两两求交点,用一个集合来存这些交点。每次求出交点后就和已经在集合中的点比较,判断是否有重合,如果无重合,则总数加一。

资料查找

关于如何根据两点坐标求出直线方程,和根据两条直线方程求交点,我查找了一些资料。


## 四、设计实现过程

代码组织

关于数据的表示,我设计了两个结构体分别来表示直线和交点。

我设计了两个主要函数:1.判断两条直线是否平行;2.求两条直线的交点。这两个函数的传入参数都是两个表示直线的结构体。

单元测试

我的代码中只有一个有返回值函数,所以对这个函数进行单元测试。编写测试代码如下:

测试结果:


## 五、性能分析

用N=500的数据进行性能分析,大约用时20分钟。

CPU使用率

函数calculate用来计算两条直线的交点,它占据了90%以上的CPU使用率。我使用了set来存交点,并且用lower_bound()来判断是否存在重合的点。一开始我就选择了使用容器本身的lower_bound(),这样效率会比较高。

内存使用率

如图所示,内存使用正常。


## 六、代码说明

定义Line结构体表示由两点(x1,y1)和(x2,y2)所确定的直线Ax+By+C=0。

定义Point结构体表示两条直线的交点坐标(x,y)。

isParallel()函数的功能是判断两条直线是否平行,若平行则返回1,不平行返回0。

在calculate()函数中,首先判断两条直线是否平行,若不平行,则计算出交点坐标,并判断该交点是否与已经存在的交点重合,若不重合,则加入集合中。

如图所示,已经消除所有警告。

posted @ 2020-03-10 12:32  SugarOrange  阅读(119)  评论(2编辑  收藏  举报