본문으로 건너뛰기
김신건의 로그

그린 정리 (Green's Theorem)

· 수정 · 📖 약 2분 · 621자/단어 #algorithm #geometry #green
Green's theorem, 그린 정리, 폐곡선 적분, 면적 적분, Green theorem

정의

그린 정리 (Green’s Theorem) 는 평면 위의 폐곡선 C 에 대한 선적분(line integral) 과 그 내부 영역 D 에 대한 이중 적분(double integral) 을 연결: ∮_C (L dx + M dy) = ∬_D (∂M/∂x - ∂L/∂y) dA. 곡선 C 는 반시계 방향(counterclockwise)으로 양의 방향.

문제 상황과 동기

폐곡선으로 둘러싸인 영역의 넓이를 선적분만으로 계산.

  • Naive 접근: 영역을 작은 사각형으로 분할해 Riemann 합. mesh size 에 의존.
  • 핵심 통찰: Green 정리의 특수한 경우: ∮_C x dy = area(D). 즉, 경계선을 따라 x dy 만 적분하면 면적.
  • PS 위치: 신발끈 공식 이 Green 정리의 이산 버전. 다각형의 면적 O(N). 좌표 기하 문제에서 면적을 직접 계산해야 할 때.

시각화

핵심 아이디어

Green 정리 (일반):
  ∮_C (L dx + M dy) = ∬_D (∂M/∂x - ∂L/∂y) dA

면적 공식 (L = -y/2, M = x/2):
  Area(D) = ∮_C (x dy - y dx) / 2 = ∮_C x dy

다각형 면적 (Shoelace, 이산 버전):
  Area = (1/2) * | Σ (x_i * y_{i+1} - x_{i+1} * y_i) |

증명 스케치: ∂M/∂x - ∂L/∂y 가 1 이 되도록 L, M 을 잡으면 우변은 area.

알고리즘

polygon_area(vertices[0..N-1]):
    area2 = 0
    for i = 0..N-1:
        j = (i+1) % N
        area2 += vertices[i].x * vertices[j].y
        area2 -= vertices[j].x * vertices[i].y
    return abs(area2) / 2.0

구현

// Green 정리 기반 shoelace 공식으로 다각형 면적
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
struct Pt { ll x, y; };
int main() {
  int n; cin >> n;
  vector<Pt> p(n);
  for (auto& v : p) cin >> v.x >> v.y;
  ll area2 = 0;
  for (int i = 0; i < n; i++) {
      int j = (i + 1) % n;
      area2 += p[i].x * p[j].y;
      area2 -= p[j].x * p[i].y;
  }
  area2 = abs(area2);
  cout << "Area: " << area2 / 2;
  if (area2 % 2) cout << ".5";
  cout << "\n";
}
stdin
4
0 0
4 0
4 3
0 3
결과
Area: 12

복잡도

항목
시간O(N)
공간O(1) (incremental)
선적분 변환O(1) per edge

변형 / 활용

  • Shoelace (신발끈 공식): Green 정리의 이산 버전. 정수 좌표 다각형의 면적.
  • Stokes 정리: 3차원 일반화. Green 은 Stokes 의 2D 특수 케이스.
  • 발산 정리 (Divergence Theorem): ∮ F·n ds = ∬ div F dA (flux form).
  • 응용: 유체 역학에서 circulation, CAD 에서 면적 계산, GIS.

함정

1. 방향

시계 방향(clockwise) 입력이면 면적이 음수. 반드시 abs() 처리.

2. 정수 좌표 .5 문제

면적이 2 로 나누어떨어지지 않으면 .5 단위. 코드에서 area2 (2배 값) 를 유지해야 정밀도 손실 없음.

3. 자기 교차 다각형

자기 교차하는 폴리곤은 Green 정리의 단순 폐곡선 조건을 만족하지 않음. signed area 개념으로 확장 가능.

BOJ 연습 문제

번호제목정답률링크
BOJ 2166다각형의 면적-kokoa-lab
BOJ 1485정사각형-kokoa-lab
BOJ 1358하키-kokoa-lab
BOJ 1004어린 왕자-kokoa-lab

참고

이 글의 용어 (3개)
다각형 넓이 (Polygon Area)algorithm
정의 다각형 넓이 (Polygon Area) 는 2D 평면 위 단순다각형 (non-self-intersecting polygon) 의 면적을 신발끈 공식 (Shoelace For…
Geometry Basic: 벡터, CCW, 외적, 내적algorithm
정의 기하 알고리즘의 밑바탕. 대부분의 2D/3D 기하 문제는 벡터 연산, 내적/외적, CCW 판정 세 가지의 조합으로 풀립니다. 벡터 2D 벡터: 두 점 $A = (ax, ay…
Pick 정리 (Pick's Theorem)algorithm
정의 Pick 정리는 꼭짓점이 격자점 (integer lattice) 위에 있는 단순 다각형의 넓이 A 를 내부 격자점 개수 I 와 경계 격자점 개수 B 로 표현: A = I +…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기