没有合适的资源?快使用搜索试试~ 我知道了~
pta判断能否构成四边形
资源推荐
资源详情
资源评论























前言
PTA 上的 JAVA 大作业, 已经是第二次了。这一次的题目只要是在前
几次的点、线、三角形的基础上跟进一步, 添加了四边形、五边形等
更加复杂的图形。正因如此, 这次大作业是更多的是对前面框架的补
充和修改以及解决上次遗留的问题。因此这里不会再过多的叙述整体
的设计。想要查看之前的作业可以点击这里。
设计
在讲设计前, 我们还是先看看题目
1. 第一题
用户输入一组选项和数据,进行与四边形有关的计算。
以下四边形顶点的坐标要求按顺序依次输入,连续输入的两个顶点
是相邻顶点,第一个和最后一个输入的顶点相邻。
选项包括:
1:输入四个点坐标,判断是否是四边形、平行四边形,判断结果
输出 true/false,结果之间以一个英文空格符分隔。
2:输入四个点坐标,判断是否是菱形、矩形、正方形,判断结果
输出 true/false,结果之间以一个英文空格符分隔。 若四个点坐
标无法构成四边形,输出"not a quadrilateral"
3:输入四个点坐标,判断是凹四边形(false)还是凸四边形(true),
输出四边形周长、面积,结果之间以一个英文空格符分隔。 若四
个点坐标无法构成四边形,输出"not a quadrilateral"
4:输入六个点坐标,前两个点构成一条直线,后四个点构成一个
四边形或三角形,输出直线与四边形(也可能是三角形)相交的交

点数量。如果交点有两个,再按面积从小到大输出四边形(或三角
形)被直线分割成两部分的面积(不换行)。若直线与四边形或三角
形的一条边线重合,输出"The line is coincide with one of the
lines"。若后四个点不符合四边形或三角形的输入,输出"not a
quadrilateral or triangle"。
后四个点构成三角形的情况:假设三角形一条边上两个端点分别是
x、y,边线中间有一点 z,另一顶点 s:
1)符合要求的输入:顶点重复或者 z 与 xy 都相邻,如 x x y s、x
z y s、x y x s、s x y y。此时去除冗余点,保留一个 x、一个
y。
2) 不符合要求的输入:z 不与 xy 都相邻,如 z x y s、x z s y、
x s z y
5:输入五个点坐标,输出第一个是否在后四个点所构成的四边形
(限定为凸四边形,不考虑凹四边形)或三角形(判定方法见选项
4)的内部(若是四边形输出 in the quadrilateral/outof the
quadrilateral,若是三角形输出 in the triangle/outof the
triangle)。如果点在多边形的某条边上,输出"on the triangle
或者 on the quadrilateral"。若后四个点不符合四边形或三角形,
输出"not a quadrilateral or triangle"。
2.
3. 第二题
用户输入一组选项和数据,进行与五边形有关的计算。
以下五边形顶点的坐标要求按顺序依次输入,连续输入的两个顶点
是相邻顶点,第一个和最后一个输入的顶点相邻。
选项包括:
1:输入五个点坐标,判断是否是五边形,判断结果输出 true/false。
2:输入五个点坐标,判断是凹五边形(false)还是凸五边形(true),
如果是凸五边形,则再输出五边形周长、面积,结果之间以一个英
文空格符分隔。 若五个点坐标无法构成五边形,输出"not a
pentagon"。
3:输入七个点坐标,前两个点构成一条直线,后五个点构成一个
凸五边形、凸四边形或凸三角形,输出直线与五边形、四边形或三
角形相交的交点数量。如果交点有两个,再按面积从小到大输出被

直线分割成两部分的面积(不换行)。若直线与多边形形的一条边
线重合,输出"The line is coincide with one of the lines"。
若后五个点不符合五边形输入,若前两点重合,输出"points
coincide"。
以上 3 选项中,若输入的点无法构成多边形,则输出"not a
polygon"。
4:输入十个点坐标,前、后五个点分别构成一个凸多边形(三角
形、四边形、五边形),判断它们两个之间是否存在包含关系(一
个多边形有一条或多条边与另一个多边形重合,其他部分都包含在
另一个多边形内部,也算包含)。
两者存在六种关系:
1、分离(完全无重合点)2、连接(只有一个点或一条边重合)
3、完全重合 4、被包含(前一个多边形在后一个多边形的内部)
5、交错 6、包含(后一个多边形在前一个多边形的内部)。
5:输入十个点坐标,前、后五个点分别构成一个凸多边形(三角形、
四边形、五边形),输出两个多边形公共区域的面积。注:只考虑
每个多边形被另一个多边形分割成最多两个部分的情况,不考虑一
个多边形将另一个分割成超过两个区域的情况。
6:输入六个点坐标,输出第一个是否在后五个点所构成的多边形
(限定为凸多边形,不考虑凹多边形),的内部(若是五边形输出
in the pentagon/outof the pentagon,若是四边形输出 in the
quadrilateral/outof the quadrilateral,若是三角形输出 in the
triangle/outof the triangle)。输入入错存在冗余点要排除,冗
余点的判定方法见选项 5。如果点在多边形的某条边上,输出"on
the triangle/on the quadrilateral/on the pentagon"。
4.
注意这里故意没有复制输入输入要求, 因为和前面是一样的。
阅读题目我们可以发现。后面的题目要求和之前的三角形有共同点,
相同的地方主要有
1. 都要判断构成多边形的合法性
2. 都要求多边形的面积、周长

3. 都有多边形被线分割求面积的要求
4. 四边形和五边形都要求判断凹凸性
5. 都要判断点是否在多边形内部
但是题目也有新的要求:
1. 需要判断不同多边形之间的位置关系
2. 需要求多边形相交的面积
3. 需要过滤点, 判读是几边形
4. 需要判断四边形的形状
根据以上的要求我们可以开始设计。
1. 多边形的合法性根据前面的框架在构造函数解决
2. 求周长、面积已经在多边形类中实现与多边形边数无关的算法。
3. 在先前被线分割是针对三角形单独实现在三角形类中的, 这也
是上次问题有点大的一个方法。现在需要分割四边形和五边形!经过
我的初步尝试, 如果对于不同边数的多边形都实现一个方法, 在四边
形的时候就过于复杂。思考后, 我认为可以在这里实现一个与多边形
边数无关的算法。
4. 判断凹凸性。我认为也可以在多边形类中实现一个和多边形边
数无关的算法。

5. 判断点是否在多边形内, 前面采用的射线法实现在多边形类内,
就是一个与多边形边数无关的算法。
6. 判断多边形位置关系。如果分别考虑三角形和三角形相交, 三
角形和四边形相交。。。种类太多太杂。所以还是要想办法找一个万
能的方法。因此这个方法必须实现再多边形中。
7. 求多边形相交面积。同上, 也必须实现在多边形类中
8. 过滤点以及判断是几变形我们可以写一个 Util(工具)类 实现一
些不太好分类的方法,主要是懒, 不想再写类了
9. 判断四边形形状。这只能实现在四边形形类中。
经过以上的分析, 我的类图最终变成了这样(这里是写好了所有方法
之后的类图, 刻意隐去了一些 private 方法)
剩余32页未读,继续阅读
资源评论


xiaoshun007~
- 粉丝: 312
- 资源: 2276
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
