Game Develop

[Algorithm]Baekjoon 2166번 :: 다각형의 면적 본문

Algorithm/Baekjoon

[Algorithm]Baekjoon 2166번 :: 다각형의 면적

MaxLevel 2024. 6. 9. 22:19

https://www.acmicpc.net/problem/2166

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
#include <math.h>
#include <queue>
#include <functional>
#include <memory.h>
#include <deque>
#include <set>
#include <unordered_map>
#include <stack>
#include <numeric>
 
using namespace std;
 
struct Vertex
{
    int y;
    int x;
};
 
int n;
vector<Vertex> nodes;
long double a, b;
 
long double CalcArea(const Vertex& va, const Vertex& vb)
{
    long double c = va.y;
    long double d = va.x;
    long double e = vb.y;
    long double f = vb.x;
    
    return (a * d + c * f + e * b - b * c - d * e - f * a) / 2;
}
 
 
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
 
    cin >> n;
 
    nodes.resize(n + 1);
    for (int i = 0; i < n; ++i)
    {
        cin >> nodes[i].y >> nodes[i].x;
    }
 
    long double answer = 0;
 
    a = nodes[0].y;
    b = nodes[0].x;
 
    for (int i = 1; i < n - 1++i)
    {
        answer += CalcArea(nodes[i], nodes[i + 1]);
    }
 
    cout << fixed;
    cout.precision(1);
 
    cout << abs(answer) << endl;
}
cs

 

다각형의 면적을 구하는 공식으로, 그냥 인지정도만 하고 있으면 될 것 같다. 

순수하게 공식이라 필요할 때 쓰자.