zoukankan      html  css  js  c++  java
  • 个人项目作业

    个人项目作业


    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,再加上这周电脑出了大问题,修不明白了,已经卖了新的,导致遇到了许多意料之外的小问题,解决起来花费了不少时间。之后会尽力赶上的!

  • 相关阅读:
    用JavaScript 来创建 mac os x 程序这样是否好
    hadoop的namenode无法启动的解决的方法
    Cocos2d-x新建模板编译问题总汇
    JBoss AS 7之基本配置和部署(The Return Of The King)
    margin和padding的学习
    HDU 1232 畅通project
    C/C++程序内存分类
    iOS 推断设备为iPhone还是iPad
    or1200中载入存储类指令说明
    专业词汇-计算机:占位符
  • 原文地址:https://www.cnblogs.com/JeromyLee/p/12508308.html
Copyright © 2011-2022 走看看