다각형의 면적

Wonseok Lee·2021년 11월 13일
0

Beakjoon Online Judge

목록 보기
56/117
post-thumbnail

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

아주 아주 기본적인 기하 문제이다.

다각형을 이루는 각 정점을 P[0], P[1], ..., P[N-1]이라고하면 이 다각형의 면적은 아래와 같다.

  • S = 0.5 * ABS(P[0]->P[1] X O->P[0] + P[1]->P[2] X O->P[1] ... P[N-1]->P[0] X O->P[N-1])
#include <iostream>
#include <utility>
#include <cmath>

using namespace std;

const int kMaxN = 10000;

int N;
pair<double, double> POINTS[kMaxN];

double Solve(void)
{
  double s = 0;

  for (int idx = 0; idx < N; ++idx)
  {
    pair<double, double> prev = POINTS[idx];
    pair<double, double> next = POINTS[(idx + 1) % N];
    pair<double, double> line(next.first - prev.first, next.second - prev.second);

    s += line.first * prev.second - line.second * prev.first;
  }

  return 0.5 * fabs(s);
}

int main(void)
{
  // For Faster IO
  ios_base::sync_with_stdio(false);
  cout.tie(nullptr);
  cin.tie(nullptr);

  // Read Inputs
  cin >> N;
  for (int it = 0; it < N; ++it)
  {
    cin >> POINTS[it].first >> POINTS[it].second;
  }

  // Solve
  cout << fixed;
  cout.precision(1);
  cout << Solve() << '\n';

  return 0;
}
profile
Pseudo-worker

0개의 댓글