• 个人项目作业


    一、概述

    项目 内容
    这个作业属于哪个课程 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()函数中,首先判断两条直线是否平行,若不平行,则计算出交点坐标,并判断该交点是否与已经存在的交点重合,若不重合,则加入集合中。

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

  • 相关阅读:
    EEPROM芯片AT2402驱动
    FPGA 状态机(FSM)的三段式推荐写法
    1602液晶驱动
    Bresenham快速画直线算法
    I2C总线驱动程序
    从数据库中取时间类型显示
    C# 页面关联类似模式窗口
    C# 页面javascript 页面跳转刷新
    网页有趣的时间显示控件
    DataSet
  • 原文地址:https://www.cnblogs.com/sugarorange/p/12454983.html
Copyright © 2020-2023  润新知