函数题:凸N边形的面积 - C/C++ 类与抽象
请设计符合下述要求的Point及Polygon类,使得程序可以正常运行。
平面内的N边形可以用N个顶点坐标来表示。请设计Point类表示一个顶点。请设计Polygon类表示一个N边形(N≥3):
1) 私有数据成员pts类型为Point*,用于指向多边形的N个动态顶点对象;
2) 构造函数接受一个整数n作为参数,n为多边形边数/点数;构造函数中需要动态分配顶点对象数组pts;
3) setVertice(int i, const Point& p)成员函数用于设置第i个顶点的坐标;
4) getVertice(i)成员函数获取并返回多边形的第i个顶点;
5) 在析构函数中释放动态顶点对象;
6) 公有函数getArea()计算并返回该多边形的面积(假设多边形为凸多边形,计算方法参考练习11-5)。
练习11-5中关于凸六边形面积计算的描述:
如图所示,当六边形为凸六边形时,可以将其拆分成四个三角形,利用海伦-秦九韶公式分别计算三角形的面积并相加,即得凸六边形的面积。
### 裁判测试程序样例:
c++
#include <iostream>
#include <cmath>
#include <stdio.h>
using namespace std;
//请在此处定义Point类及Polygon类
int main()
{
Polygon poly1(6);
poly1.setVertice(0,Point(0,0));
poly1.setVertice(1,Point(33.2,30));
poly1.setVertice(2,Point(61.2,0));
poly1.setVertice(3,Point(61,-29.1));
poly1.setVertice(4,Point(20,-57.7));
poly1.setVertice(5,Point(0,-33.2));
printf("Vertex 3 of poly 1: (%.1f, %.1f)\n",poly1.getVertice(3).x,poly1.getVertice(3).y);
printf("Area of polygon 1: %.1f\n",poly1.getArea());
Polygon poly2(4);
poly2.setVertice(0,Point(0,0));
poly2.setVertice(1,Point(33.2,0.7));
poly2.setVertice(2,Point(20.3,-22));
poly2.setVertice(3,Point(5.1,-19.7));
printf("Vertex 2 of poly 2: (%.1f, %.1f)\n",poly2.getVertice(2).x,poly2.getVertice(2).y);
printf("Area of polygon 2: %.1f\n",poly2.getArea());
return 0;
}
### 输入样例:
in
### 输出样例:
out
Vertex 3 of poly 1: (61.0, -29.1)
Area of polygon 1: 3609.3
Vertex 2 of poly 2: (20.3, -22.0)
Area of polygon 2: 516.2
请注意:函数题只需要提交相关代码片段,不要提交完整程序。
### 感觉不会? 那试着听听**免费的B站网课**
[简洁的C和C++ - 重庆大学在线课程](https://www.bilibili.com/video/BV1it411d7zx/)
[Python编程基础及应用 - 重庆大学在线课程](https://www.bilibili.com/video/BV1kt411R7uW/)
答案:若无答案欢迎评论
平面内的N边形可以用N个顶点坐标来表示。请设计Point类表示一个顶点。请设计Polygon类表示一个N边形(N≥3):
1) 私有数据成员pts类型为Point*,用于指向多边形的N个动态顶点对象;
2) 构造函数接受一个整数n作为参数,n为多边形边数/点数;构造函数中需要动态分配顶点对象数组pts;
3) setVertice(int i, const Point& p)成员函数用于设置第i个顶点的坐标;
4) getVertice(i)成员函数获取并返回多边形的第i个顶点;
5) 在析构函数中释放动态顶点对象;
6) 公有函数getArea()计算并返回该多边形的面积(假设多边形为凸多边形,计算方法参考练习11-5)。
练习11-5中关于凸六边形面积计算的描述:
如图所示,当六边形为凸六边形时,可以将其拆分成四个三角形,利用海伦-秦九韶公式分别计算三角形的面积并相加,即得凸六边形的面积。
### 裁判测试程序样例:
c++
#include <iostream>
#include <cmath>
#include <stdio.h>
using namespace std;
//请在此处定义Point类及Polygon类
int main()
{
Polygon poly1(6);
poly1.setVertice(0,Point(0,0));
poly1.setVertice(1,Point(33.2,30));
poly1.setVertice(2,Point(61.2,0));
poly1.setVertice(3,Point(61,-29.1));
poly1.setVertice(4,Point(20,-57.7));
poly1.setVertice(5,Point(0,-33.2));
printf("Vertex 3 of poly 1: (%.1f, %.1f)\n",poly1.getVertice(3).x,poly1.getVertice(3).y);
printf("Area of polygon 1: %.1f\n",poly1.getArea());
Polygon poly2(4);
poly2.setVertice(0,Point(0,0));
poly2.setVertice(1,Point(33.2,0.7));
poly2.setVertice(2,Point(20.3,-22));
poly2.setVertice(3,Point(5.1,-19.7));
printf("Vertex 2 of poly 2: (%.1f, %.1f)\n",poly2.getVertice(2).x,poly2.getVertice(2).y);
printf("Area of polygon 2: %.1f\n",poly2.getArea());
return 0;
}
### 输入样例:
in
### 输出样例:
out
Vertex 3 of poly 1: (61.0, -29.1)
Area of polygon 1: 3609.3
Vertex 2 of poly 2: (20.3, -22.0)
Area of polygon 2: 516.2
请注意:函数题只需要提交相关代码片段,不要提交完整程序。
### 感觉不会? 那试着听听**免费的B站网课**
[简洁的C和C++ - 重庆大学在线课程](https://www.bilibili.com/video/BV1it411d7zx/)
[Python编程基础及应用 - 重庆大学在线课程](https://www.bilibili.com/video/BV1kt411R7uW/)
答案:若无答案欢迎评论