BUAA2020软工作业(三)——个人项目
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2020春季计算机学院软件工程(罗杰 任健) |
这个作业的要求在哪里 | 个人项目作业 |
我在这个课程的目标是 | 进一步提高自己的编码能力,工程能力 |
这个作业在哪个具体方面帮助我实现目标 | 学习c++,掌握测试方法,掌握软件工程开发规范和相关工具的使用 |
其他参考文献 | 博客1 |
教学班级 | 006 |
项目地址 | https://github.com/Michael-Steven/BUAA-software-engineering-personal-project.git |
一、写在前面
本次作业内容比较简单,比较适合软件工程入门,由于之前没有用c++写过程序,所以这次写起来不算是特别顺利,出过很多玄学bug,不过借助搜索引擎的帮助,我的问题都解决了。通过这次作业我也正好入门了c++的面向对象机制,为以后的作业打下基础。
下述 PSP 表格记录了我在程序的各个模块的开发上耗费的时间:
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
· Estimate | · 估计这个任务需要多少时间 | 20 | 20 |
Development | 开发 | ||
· Analysis | · 需求分析 (包括学习新技术) | 60 | 60 |
· Design Spec | · 生成设计文档 | 30 | 50 |
· Design Review | · 设计复审 (和同事审核设计文档) | 20 | 20 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 20 | 10 |
· Design | · 具体设计 | 30 | 30 |
· Coding | · 具体编码 | 240 | 300 |
· Code Review | · 代码复审 | 30 | 20 |
· Test | · 测试(自我测试,修改代码,提交修改) | 180 | 240 |
Reporting | 报告 | ||
· Test Report | · 测试报告 | 50 | 30 |
· Size Measurement | · 计算工作量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 10 | 10 |
合计 | 700 | 800 |
二、解题思路
拿到这个题之后,首先明白这是一道求交点的题,根据数学知识即可得出求交点的公式:
- 两直线的交点:直接联立两个直线的方程即可得解;
- 直线与圆的交点:参考博客1,采用辅助线的方法进行求解,比直接联立方程组求解简单得多;
- 两个圆的交点:将两个圆的标准方程相减得到两个圆交点所在直线的方程,然后根据直线与圆的交点算法进行求解。
三、实现过程
算法选择
采用O(n^2)的算法,每新增一条直线或者一个圆,就和之前输入的所有直线和圆进行交点计算,并存储到相应容器中,最后统计存储的交点数量。
类和方法的设计
本代码共有4个类:
- Point:存储交点坐标;
- Line:存储直线方程的参数;
- get_line_line_intersect():求直线和直线交点
- get_line_circle_intersect():求直线和圆的交点
- Circle:存储圆方程的参数;
- get_circle_line_intersect():求圆和直线的交点
- get_circle_circle_intersect():求圆和圆的交点
- Intersect:存储所有直线、圆和交点。
- add_line():新增直线
- add_circle():新增圆
容器的选择
采用STL中的Set存储,Set中的Insert方法可以在插入新元素的同时自动去除重复的元素,由于本次作业的交点是浮点数,所以在代码中重载了Set中的<运算符,在进行浮点数比较时忽略极小的数值差异,达到去重的目的。
单元测试
对于以下每种情况分别手动编写测试数据:
- 多个直线相交于一个点;
- 直线和圆相切;
- 圆和圆内切/外切;
- 多个圆相交于一个点;
- 一条直线和多个圆相交于一点;
- 多条直线和一个圆相交于一点;
- 其他普通情况。
四、性能改进
本次作业我在算法上没有什么改进的地方,主要是一些细节的改善,比如减少重复的函数调用等等。
性能分析
Code Quality Analysis工具分析
五、关键代码
直线和直线的交点
这里是直接套公式计算交点坐标并存储在intersect中。
直线和圆的交点
直接翻译上面提到的算法就可以,这里要注意的是,答案可能是两个相同的点也可能是两个不同的点,由于Set有去重的功能,这里统一按两个不同点的情况来计算。
圆和圆的交点
在计算出交点连线的方程后直接调用直线和圆的交点方法即可。
BUAA2020软工作业(三)——个人项目的更多相关文章
- BUAA2020软工作业——提问回顾与个人总结
项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 提问回顾与个人总结 我在这个课程的目标是 进一步提高自己的编码能力,工程能力 这个作业在哪个具体方 ...
- BUAA2020软工作业(四)——结对项目
项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 结对项目作业 我在这个课程的目标是 进一步提高自己的编码能力,工程能力,团队协作能力 这个作业在哪 ...
- BUAA2020软工作业(五)——软件案例分析
项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 软件案例分析作业 我在这个课程的目标是 进一步提高自己的编码能力,工程能力 这个作业在哪个具体方面 ...
- BUAA2020软工作业(二)——对软件工程的初步理解
项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人博客作业 我在这个课程的目标是 进一步提高自己的编码能力,工程能力 这个作业在哪个具体方面帮助 ...
- BUAA2020软工作业(一)——谈谈我和计算机的缘分
项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 第一次作业-热身! 我在这个课程的目标是 进一步提高自己的编码能力,工程能力 这个作业在哪个具体方 ...
- BUAA2020软工团队beta得分总表
BUAA2020软工团队beta得分总表 [TOC] 零.团队博客目录及beta阶段各部分博客地址 团队博客 计划与设计博客 测试报告博客 发布声明博客 事后分析博客 敏 杰 开 发♂ https:/ ...
- [软工作业]-软件案例分析-CSDN
[软工作业]-软件案例分析-CSDN(app) 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人博客作业-软件案例分析 我在这个课程的目标是 ...
- 软工作业-----Alpha版本第一周小结
软工作业-----Alpha版本第一周小结 Part1.第一周周计划记录 姓名 学号 周前计划安排 每周工作记录 自我打分 yrz(队长) 1417 1.进行任务分析 2.任务分配 ...
- 【软工作业&思考】关于软工的一些概念性理解暨第一次阅读作业
概述 项目 内容 本次作业所属课程 2019BUAA软件工程 周二班 本次作业要求 第1次个人作业当然,比这个更重要百倍的还是实实在在的思考,这也是标题如此命名的原因 我在本课程的目标 在原有实践经验 ...
随机推荐
- AQS快速入门
一.模板方法模式 父子类多态,父类中用一个方法调用执行所有所需要的方法: 父类: 子类: 主线程执行时候调用父类的模板方法: 二.AQS思想 sync都是独占锁,lock显示锁也是,只有读写锁是共享锁 ...
- Linux上项目部署在home目录中无法访问的问题
在Linux上开发一个Web项目,使用nginx作为Web服务器.在nginx的配置文件中添加一个server,root路径写的是放在home目录中的项目目录的路径.打开浏览器访问,提示错误:403 ...
- 第24篇-虚拟机对象操作指令之getfield
getfield指令表示获取指定类的实例域,并将其值压入栈顶.其格式如下: getstatic indexbyte1 indexbyte2 无符号数indexbyte1和indexbyte2构建为(i ...
- 关于PHP数组Key的强制类型转换
PHP是弱类型语言,就像JavaScript一样,在定义变量时,不需要强制指定变量的类型.同时,PHP又有着强大的数组功能,数组的Key即可以是普通的数字类型下标,也可以是字符串类型的Hash键值,那 ...
- Java基础系列(33)- 计算器
package method; import java.util.Scanner; public class Demo09 { static double result; static String ...
- php socket 发送http请求 GET POST
http://docs.php-http.org/en/latest/httplug/users.html <?php /** * Created by PhpStorm. * User: Mc ...
- linux 客户机挂载vitualbox共享文件夹
1. 安装增强功能包(Guest Additions) 安装好Ubuntu 9.10后,运行Ubuntu并登录.然后在VirtualBox的菜单里选择"设备(Devices)" - ...
- Python语句,表达式的区别?
参考了网上的文章,说 表达式的结果是值,对象 比如1+2, 是表达式 具体根据运算符不同有算术,逻辑,比较等等类型的表达式 语句是控制程序走向,不产生值 例如if/else等 参考: https:// ...
- 鸿蒙内核源码分析(调度机制篇) | 任务是如何被调度执行的 | 百篇博客分析OpenHarmony源码 | v7.07
百篇博客系列篇.本篇为: v07.xx 鸿蒙内核源码分析(调度机制篇) | 任务是如何被调度执行的 | 51.c.h .o 任务管理相关篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调 ...
- FastAPI(44)- 操作关系型数据库
ORM FastAPI 可与任何数据库和任何样式的库配合使用并和数据库通信 object-relational mapping 对象关系映射 ORM 具有在代码和数据库表(关系)中的对象之间进行转换( ...