题目地址
学习了任意多边形的计算,通过向量叉乘来进行计算。
计算公式
如果逆时针给出坐标,求得是正的,就是答案。如果顺时针给出坐标,求得是负,需要变正
具体推导过程
博客地址1
还学了海伦公式求三角形面积
S = abs(p * (p - a) * (p - b) * (p - c)), p是三角形周长的一半,a,b,c是三角形的边长
ac代码
#include <iostream>
#include <cstdio>
using std::cout; using std::cin; using std::endl;
struct Point{
int x;
int y;
};
//struct Point point[100];
//typedef Point one;
Point point[100];
double sum = 0;
void Area(Point a, Point b) {
sum += 0.5 * (a.x * b.y - a.y * b.x);
}
int main() {
//freopen("outnum.txt", "w", stdout);
int n;
while(scanf("%d", &n) != EOF && n) {
for(Point &a: point) {
cin >> a.x >> a.y;
}
for(int i = 0; i < n; i++) {
cout << point[i].x << " " << point[i].y << endl;
}
putchar('\n');
for(int i = 0; i < n - 1; i++) {
Area(point[i], point[i + 1]);
}
Area(point[n - 1], point[0]);
/*
if(sum < 0) {
printf("%.1f\n", -sum);
}
else {
printf("%.1f\n", sum);
}
*/
printf("%.1f\n", sum); //题目已经说是逆时针
sum = 0;
}
return 0;
}