叉乘应用:计算三角形面积
向量p=(a,b), q=(c,d)
p × q = ad - bc = - q × p
叉乘的大小等于于2倍三角形面积
测试样例:
#include <bits/stdc++.h>
#define ll long long
#define _for(i, a, b) for (int i = (a); i < (b); ++i)
#define sc scanf
#define pr printf
#define TLE \
ios::sync_with_stdio(false); \
cin.tie(0);
const int maxn = 1e5 + 5;
const int INF = 0x3f3f3f3f;
using namespace std;
int n;
double gx = 0.0, gy = 0.0;
double area = 0.0, _area =0.0;
struct Node {
double x,y;
}c[maxn];
int main() {
TLE;
cin >> n;
_for(i,0,n) cin >> c[i].x >> c[i].y;
c[n].x=c[0].x;
c[n].y=c[0].y;
_for(i,0,n) {
_area = (c[i].x*c[i+1].y - c[i].y*c[i+1].x)/2.0;
area += _area;
gx += _area * (c[i].x + c[i+1].x)/3.0;
gy += _area * (c[i].y + c[i+1].y)/3.0;
}
if(area == 0.0) gx = gy = 0.0;
else {
gx = fabs(gx/area);
gy = fabs(gy/area);
}
cout << "gx = " << gx << endl;
cout << "gy = " << gy << endl;
return 0;
}