Pagini recente » Monitorul de evaluare | Cod sursa (job #432824) | Monitorul de evaluare | Cod sursa (job #231664) | Cod sursa (job #2489766)
#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;
long double xx1, xx2, xx3, xx4, yy1, yy2, yy3, yy4, x[100010], y[100010];
long 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];
}
if(n<=2){
fout<<setprecision(5)<<fixed;
fout<<0;
return 0;
}
for(int i=3; i<=n; i++){
suma+=det(x[1], y[1], x[i-1], y[i-1], x[i], y[i]);
}
suma=max(suma, -suma)/2;
fout<<setprecision(5)<<fixed;
fout<<suma;
}