2166번 : 다각형의 면적
2차원 평면상에 N(3 ≤ N ≤ 10,000)개의 점으로 이루어진 다각형이 있다. 이 다각형의 면적을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. 다음 N개의 줄에는 다각형을 이루는 순서대로 N개의 점의 x, y좌표가 주어진다. 좌표값은 절댓값이 100,000을 넘지 않는 정수이다.
출력
첫째 줄에 면적을 출력한다. 면적을 출력할 때에는 소수점 아래 둘째 자리에서 반올림하여 첫째 자리까지 출력한다.
생각해 볼 점
외적을 통해 세 꼭지점의 면적을 구하여 더해줄 것입니다. 아래 링크를 참조해 봅니다.
다크 프로그래머 :: 다각형 도형의 면적(넓이) 구하기 (tistory.com)
코드
#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;
//신발끈 외적공식
double outer_product(pair<ll, ll> A, pair<ll, ll> B, pair<ll, ll> C)
{
double temp1 = A.first * B.second + B.first * C.second + C.first * A.second;
double temp2 = A.second * B.first + B.second * C.first + C.second * A.first;
return (temp1 - temp2) / 2;
}
int main()
{
int N;
scanf("%d", &N);
pair<ll, ll> *points = new pair<ll, ll>[N];
for(int i = 0; i < N; i++) scanf("%lld %lld", &points[i].first, &points[i].second);
pair<ll, ll> origin = points[0]; //기준점
double result = 0.0;
for(int i = 1; i < N - 1; i++)
{
pair<ll, ll> p1 = points[i];
pair<ll, ll> p2 = points[i + 1];
result += outer_product(p1, p2, origin);
}
printf("%.1lf\n", fabs(result));
delete[] points;
return 0;
}
그 외
'공부 및 정리 > 백준 코드' 카테고리의 다른 글
[C++]백준- 2618번 문제 (0) | 2021.10.18 |
---|---|
[C++]백준 - 11758번 문제 (0) | 2021.10.17 |
[C++]백준 - 9252번 문제 (0) | 2021.10.06 |
[C++]백준 - 23057번 문제 (0) | 2021.10.06 |
[C++]백준 - 23056번 문제 (0) | 2021.10.05 |