• 个人项目作业


    个人项目作业

    教学班级:006

    项目地址:https://github.com/mjjm3/Intersect.git

    PSP 表格

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

    解题思路

    题目的基本要求是给定N条直线,输出这些直线之间的交点的个数。首先的想法就是把这些直线两两组合,计算交点,计算交点的方法是把直线表示为ax+by+c = 0的形式,联立方程求解,如果有交点就把这个交点放入集合里面,最后输出集合的大小。这种做法的复杂度为O(N^2), 目前没有想到更好的做法。

    附加要求是添加了圆形,输出所有交点的个数,想法依然是两两组合求交点,只需要添加计算圆与圆、圆与直线的交点的函数。圆表示为(x + c)^2 + (y + d)^2 = r^2。

    设计实现过程

    设计

    我一共设计了Point,Line,Circle三个类,Line的构造函数传入两个Point对象,Circle的构造函数传入一个Point对象和double类型的半径r。Line内部有计算Line和Line之间,Line和Circle之间交点的static函数,Circle内部有计算Circle和Circle之间交点的static函数,返回值均为Point对象。

    单元测试

    单元测试主要测试三个static函数。测试用例考虑了两条平行直线,平行于y轴的直线,直线与圆相切,圆与圆相切等情况。

    程序性能改进

    程序中消耗最大的函数为计算两条直线的交点的函数。目前没有想到比较好的改进方法。

    代码说明

    程序的整体结构。

    程序中用来统计交点个数的数据结构,unordered_set。

    重载操作符,用于unordered_set判断两个point是否相同。

    Point的hash函数,也是用于unordered_set。

    用于计算两直线交点的函数,直线被表示为ax+by+c=0 的形式,返回值为Point对象。

  • 相关阅读:
    Mysql数据查询
    Mysql数据类型
    desc和show
    Mysql权限管理
    深入理解inode和硬链接和软连接和挂载点
    Linux用户和组
    VIM文本编辑器
    Linux文件操作
    MySQL基础
    八大排序
  • 原文地址:https://www.cnblogs.com/mjmj111/p/12421232.html
Copyright © 2020-2023  润新知