Pagini recente » Cod sursa (job #1641569) | Cod sursa (job #183932) | Cod sursa (job #1997343) | Cod sursa (job #831948) | Cod sursa (job #2489726)
#include <fstream>
#include <iomanip>
#include <math.h>
using namespace std;
ifstream fin("aria.in");
ofstream fout("aria.out");
/// aria este |DET|/2
/// triunghiuri asemenea -> y3-y1 = x3-x1
/// y2-y1 x2-x1
/// inmultim pe diagonala -> (y3-y1)*(x2-x1) - (y2-y1)*(x3-x1)
/// acesta este determinantul DET
/// daca DET a 3 puncte este 0 acestea sunt coliniare
/// (aria triungiului format de ele fiind 0)
int n, xx1, xx2, xx3, xx4, yy1, yy2, yy3, yy4, x[100010], y[100010];
double suma;
int det(int x1, int y1, int x2, int y2, int x3, int y3){
return (y3-y1)*(x2-x1) - (y2-y1)*(x3-x1);
}
int detFataDeZEro(int x2, int y2, int x3, int y3){
return y3*x2-y2*x3;
}
int main(){
/// Aria unui poligon se calculeaza alegand orice punct - pentru simplificare (0,0)
/// si facand determinantul acelui punct cu toate laturile poligonului
/// unele "arii" (det/2) vor avea semn negativ, iar altele pozitiv
/// adunandu-le si facand modulul vom obtine aria poligonului
/// pentru un poligon cu n laturi Aria=|d12+d23+...+dn1|/2
fin>>n;
for(int i=1; i<=n; i++){
fin>>x[i]>>y[i];
}
for(int i=1; i<n; i++){
suma+=detFataDeZEro(x[i], y[i], x[i+1], y[i+1]);
}
suma+=detFataDeZEro(x[n], y[n], x[1], y[1]);
suma=max(suma, -suma)/2;
fout<<setprecision(5)<<fixed;
fout<<suma;
}