程序填空题:凸六边形的面积 - C/C++ 结构
平面内的六边形可以用六个点坐标表示:
1. 请设计Point结构表示一个坐标点。
2. 请设计Hexagon结构表示一个六边形,其内包括6个Point成员。
3. 如图1所示,当六边形为凸六边形时,可以将其拆分成四个三角形,利用海伦-秦九韶公式分别计算三角形的面积并相加,即得凸六边形的面积。请实现凸六边形面积计算函数computeHexagonArea()并编写合适的代码加以验证。
![image.png](~/ac89229f-1eb3-403c-ba7c-52090d2ebfbe.png)
图1
请将下述代码补充完整,完成上述目标。
c
#include <stdio.h>
#include <math.h>
typedef struct {
double x;
double y;
} Point;
typedef struct {
} Hexagon;
static inline double computeDistance(const Point* p1, const Point* p2){
double d =
return d;
}
double computeTriangleArea(const Point* p1, const Point* p2, const Point* p3)
{
double a = computeDistance(p1,p2);
double b = computeDistance(p2,p3);
double c =
double p = (a+b+c)/2.0;
double s = sqrt(p*(p-a)*(p-b)*(p-c));
return s;
}
double computeHexagonArea(const Hexagon* h){
return
computeTriangleArea(&h->pts[0],&h->pts[1],&h->pts[2]) +
+
computeTriangleArea(&h->pts[0],&h->pts[3],&h->pts[4]) +
}
int main()
{
Hexagon h = {{{0,0},{33.2,30},{61.2,0},{61,-31.1},{20,-57.1},{0,-33.2}}};
printf("Area of this hexagon: %.3f",computeHexagonArea());
return 0;
}
程序期望的执行结果为:
Area of this hexagon: 3632.210
### 感觉不会? 那试着听听**免费的B站网课**
[简洁的C和C++ - 重庆大学在线课程](https://www.bilibili.com/video/BV1it411d7zx/)
[Python编程基础及应用 - 重庆大学在线课程](https://www.bilibili.com/video/BV1kt411R7uW/)
![image.png](~/6e79c9e3-cb7f-486d-ab78-36b5a8f655c0.png)
答案:
第1空:Point pts[6];
第2空:sqrt((p1->x-p2->x)*(p1->x-p2->x)+(p1->y-p2->y)*(p1->y-p2->y));
第3空:computeDistance(p1,p3);
第4空:computeTriangleArea(&h->pts[0],&h->pts[2],&h->pts[3])
第5空:computeTriangleArea(&h->pts[0],&h->pts[4],&h->pts[5]);
第6空:&h
1. 请设计Point结构表示一个坐标点。
2. 请设计Hexagon结构表示一个六边形,其内包括6个Point成员。
3. 如图1所示,当六边形为凸六边形时,可以将其拆分成四个三角形,利用海伦-秦九韶公式分别计算三角形的面积并相加,即得凸六边形的面积。请实现凸六边形面积计算函数computeHexagonArea()并编写合适的代码加以验证。
![image.png](~/ac89229f-1eb3-403c-ba7c-52090d2ebfbe.png)
图1
请将下述代码补充完整,完成上述目标。
c
#include <stdio.h>
#include <math.h>
typedef struct {
double x;
double y;
} Point;
typedef struct {
} Hexagon;
static inline double computeDistance(const Point* p1, const Point* p2){
double d =
return d;
}
double computeTriangleArea(const Point* p1, const Point* p2, const Point* p3)
{
double a = computeDistance(p1,p2);
double b = computeDistance(p2,p3);
double c =
double p = (a+b+c)/2.0;
double s = sqrt(p*(p-a)*(p-b)*(p-c));
return s;
}
double computeHexagonArea(const Hexagon* h){
return
computeTriangleArea(&h->pts[0],&h->pts[1],&h->pts[2]) +
+
computeTriangleArea(&h->pts[0],&h->pts[3],&h->pts[4]) +
}
int main()
{
Hexagon h = {{{0,0},{33.2,30},{61.2,0},{61,-31.1},{20,-57.1},{0,-33.2}}};
printf("Area of this hexagon: %.3f",computeHexagonArea());
return 0;
}
程序期望的执行结果为:
Area of this hexagon: 3632.210
### 感觉不会? 那试着听听**免费的B站网课**
[简洁的C和C++ - 重庆大学在线课程](https://www.bilibili.com/video/BV1it411d7zx/)
[Python编程基础及应用 - 重庆大学在线课程](https://www.bilibili.com/video/BV1kt411R7uW/)
![image.png](~/6e79c9e3-cb7f-486d-ab78-36b5a8f655c0.png)
答案:
第1空:Point pts[6];
第2空:sqrt((p1->x-p2->x)*(p1->x-p2->x)+(p1->y-p2->y)*(p1->y-p2->y));
第3空:computeDistance(p1,p3);
第4空:computeTriangleArea(&h->pts[0],&h->pts[2],&h->pts[3])
第5空:computeTriangleArea(&h->pts[0],&h->pts[4],&h->pts[5]);
第6空:&h