득이공간
[백준 C++] 2166 다각형의 면적 - 기하학 본문
#include <iostream>
using namespace std;
typedef pair<double, double> Vec2;
Vec2 Vertex[10000];
double GetTriangle(const Vec2& A, const Vec2& B, const Vec2& C)
{
Vec2 AB = Vec2(B.first - A.first, B.second - A.second);
Vec2 AC = Vec2(C.first - A.first, C.second - A.second);
return (AB.first * AC.second - AB.second * AC.first) / 2.0;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
double Sum = 0.0;
int N;
cin >> N;
cin >> Vertex[0].first >> Vertex[0].second;
for (int i = 1; i < N; ++i)
{
cin >> Vertex[i].first >> Vertex[i].second;
Sum += GetTriangle(Vertex[0], Vertex[i - 1], Vertex[i]);
}
cout << fixed;
cout.precision(1);
cout << abs(Sum);
}
볼록 다각형, 오목 다각형의 경우를 모두 커버하는 방식을 이용해서 다각형 면적을 구하는 문제입니다.
다각형 내의 한 꼭지점을 포함하는 모든 삼각형의 면적을 더해주고 마지막에 절대값을 씌워주는 방식입니다.
삼각형의 면적은 세 꼭지점을 이용한 두 벡터의 외적을 통해서 구했습니다.
참고자료
'PS > 알고리즘 문제풀이' 카테고리의 다른 글
[백준 C++] 27172 수 나누기 게임 - 에라토스테네스의체 (0) | 2024.02.21 |
---|---|
[백준 C++] 2467 용액 - 투포인터 (0) | 2024.02.21 |
[백준 C++] 18115 카드 놓기 - 덱 (0) | 2024.02.20 |
[백준 C++] 11660 구간 합 구하기 5 - 다이나믹프로그래밍 (0) | 2024.02.20 |
[백준 C++] 9465 스티커 - 다이나믹프로그래밍 (1) | 2024.02.20 |