• 个人项目作业


    个人项目作业


    1.教学班级和Github项目地址

    项目 内容
    教学班级 005
    项目地址 https://github.com/JeromyLee/IntersectProject

    2.PSP 2.1表格

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

    3.解题思路

    n条直线若满足以下情况:

    • 无三条及以上直线交与一点
    • 无平行线
    • 无重合直线(本题保证交点为有限个,因此无需考虑)

    交点个数为,

    [frac{n(n-1)}{2} ]

    采用暴力求解,求出所有的交点,在添加的过程中去重。

    4.设计实现过程

    由于不需要复杂的操作,因此只有一个类,仅将直线包装成结构体,以及处理点和直线的相应方法。
    两点确定一条直线表示为

    [Ax+By+C=0 ]

    其中,

    [A=y_2-y_1 ]

    [B=x_1-x_2 ]

    [C=x_2*y_1-x_1*y_2 ]

    均为整数。
    考虑到浮点型可能带来的精度问题,因此将交点坐标表示为分数,

    [(frac{x_u}{x_d},frac{y_u}{y_d}) ]

    其中,

    [x_u=B_2*C_1-B_1*C_2 ]

    [y_u=A_1*C_2-A_2*C_1 ]

    [x_d=y_d=A_2*B_1-A_1*B_2 ]

    也均为整数。

    5.程序改进

    在容器选择方面,最初选择使用set存放交点,但需要重写operator,而且set本身虽然使用起来方便,但效率一般。最终选择了vector。但也依然有可优化之处,如插入时自动排序去重,而非乱序去重。以及交点的四个参数,实际上用三个整型就能表示。

    6.代码说明

    首先是代码总格局

    然后是一些函数


    以及主函数中命令行参数的处理部分

    消除Warnings

    7.总结

    这次作业总体不难,但囿于个人能力问题,加上第一次接触C++与VS,再加上这周电脑出了大问题,修不明白了,已经卖了新的,导致遇到了许多意料之外的小问题,解决起来花费了不少时间。之后会尽力赶上的!

  • 相关阅读:
    nginx源代码分析--从源代码看nginx框架总结
    [Android]自己定义带删除输入框
    A7139 无线通信驱动(STM32) 添加FIFO扩展模式,能够发送超大数据包
    cmake使用演示样例与整理总结
    Hibernate也须要呵护——Hibernate的泛型DAO
    hdoj-1242-Rescue【广搜+优先队列】
    五类常见算法小记 (递归与分治,动态规划,贪心,回溯,分支界限法)
    动态标绘演示系统1.4.3(for ArcGIS Flex)
    CodeForces
    OpenCV——颜色运算
  • 原文地址:https://www.cnblogs.com/JeromyLee/p/12508308.html
Copyright © 2020-2023  润新知