면적 계산 알고리즘
한 줄 요약
3D 공간에서 사용자가 찍은 다각형의 면적을 구하기 위해, 2D 경위도 기반 Delaunay 삼각분할로 "어떻게 나눌지"를 결정하고, 원본 3D 좌표(ECEF Cartesian3)의 벡터 외적으로 "면적이 얼마인지"를 계산하는 하이브리드 방식. 경사면도 반영되며, 건설 현장 스케일에서 오차 1% 미만으로 충분히 정확하다.
왜 가로 × 세로로 안 되는가
2D 평면에서 사각형의 면적은 가로 × 세로다. 3D GIS 환경에서는 두 가지 이유로 복잡해진다:
첫째, 다각형이 3D 공간에 존재한다. 사용자가 3D 모델 위에 찍은 점들은 경사면, 건물 벽면, 지형 기복 위에 있을 수 있다.
둘째, 4개 이상의 점은 하나의 평면 위에 놓여있지 않을 수 있다. 이런 비평면 다각형의 면적은 단순한 공식 하나로 구할 수 없다.
하이브리드 접근: 2D에서 나누고, 3D에서 계산한다
"어떻게 나눌지"는 2D에서 결정하고, "면적은 얼마인지"는 3D에서 계산한다.
- 꼭짓점의 Cartesian3(ECEF) 좌표를 경위도(2D)로 변환
- 경위도로 Delaunay 삼각분할 → 어떤 점 3개를 묶을지 결정
- 각 삼각형에 대해, 원본 3D 좌표로 벡터 외적 계산
- 외적의 크기 / 2 = 삼각형의 3D 면적
- 모든 삼각형 면적 합산
왜 Delaunay 삼각분할인가
Delaunay 삼각분할은 가능한 한 균일한 삼각형(최소 내각 최대화)을 만든다. 너무 길쭉하거나 납작한 삼각형을 피하여 수치 안정성이 높다.
왜 벡터 외적인가
삼각형의 3D 면적 = |AB × AC| / 2. 이 계산은 3D에서 이루어지므로 경사면의 실제 표면적이 반영된다.
Newell's Method보다 정확한 이유
Newell's Method(다각형 전체에 벡터 외적 1회 적용)는 모든 꼭짓점이 하나의 평면 위에 있어야 정확하다. 비평면 다각형에서는 오차가 발생한다.
삼각분할 방식: 삼각형의 3개 점은 항상 하나의 평면을 정의한다 — 기하학적 사실이다. 비평면 다각형이라도 각 조각은 정확하다.
유일한 근사: 2D 삼각분할에 높이 정보 미사용
Delaunay 삼각분할에 경위도(2D)만 사용하므로, 절벽 위의 점과 아래의 점이 같은 삼각형에 묶일 수 있다. 그러나 면적 계산 자체는 원본 3D 좌표로 수행하므로, 분할의 비최적성이 면적 정확도에 직접적 오차를 만들지는 않는다. 건설 현장 스케일(수백 m)에서 문제가 되지 않는다.
대안: 구면 초과 (Spherical Excess)
건설 현장 스케일(100m × 100m)에서 벡터 외적과 구면 초과의 차이는 1% 미만이다. 시/도 단위의 넓은 영역에서는 구면 초과 방법이 필요하다.
이 경험에서 추출한 원칙
-
"어떻게 나눌지"와 "얼마인지"를 분리하면, 각각에 최적의 방법을 적용할 수 있다. 삼각분할은 2D에서 효율적이고, 면적 계산은 3D에서 정확하다.
-
삼각형은 항상 평면이라는 기하학적 사실이 정확도를 보장한다. 복잡한 문제를 "항상 성립하는 성질"을 가진 단위로 분해하는 것이 핵심이다.
3D 공간에서 다각형 면적이 필요하다면, 직접 계산하기 전에 먼저 삼각분할하라. 비평면 다각형을 삼각형으로 분해하면 각 조각의 면적 계산이 정확해진다.