득이공간

[백준 C++] 2166 다각형의 면적 - 기하학 본문

PS/알고리즘 문제풀이

[백준 C++] 2166 다각형의 면적 - 기하학

쟁득 2024. 2. 21. 10:25
 

2166번: 다각형의 면적

첫째 줄에 N이 주어진다. 다음 N개의 줄에는 다각형을 이루는 순서대로 N개의 점의 x, y좌표가 주어진다. 좌표값은 절댓값이 100,000을 넘지 않는 정수이다.

www.acmicpc.net

#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);
}

 

볼록 다각형, 오목 다각형의 경우를 모두 커버하는 방식을 이용해서 다각형 면적을 구하는 문제입니다.

다각형 내의 한 꼭지점을 포함하는 모든 삼각형의 면적을 더해주고 마지막에 절대값을 씌워주는 방식입니다.

삼각형의 면적은 세 꼭지점을 이용한 두 벡터의 외적을 통해서 구했습니다.


참고자료

 

세 꼭짓점 좌표를 이용한 삼각형 넓이 구하기(벡터의 외적)

아래 그림과 같이 삼각형의 세 꼭짓점의 좌표를 알 때, 삼각형의 넓이를 간단히 구하는 공식을 소개하겠습...

blog.naver.com

 

백준 2166 다각형의 면적 c++

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

ip99202.github.io

 

C++) 원하는 자리수 까지 출력하기 (반올림, 올림, 내림)

https://www.acmicpc.net/problem/2865 2865번: 나는 위대한 슈퍼스타K 첫째 줄에 N, M, K가 주어진다. (1 ≤ M ≤ 100, 1 ≤ K ≤ N ≤ 100) 다음 M개의 줄은 각 장르에 대한 참가자의 능력이 주어진다. 이 줄에는 N개

nextcoder.tistory.com