좌표평면상의 좌표로 구성된 다각형의 면적을 구하는 공식이다. 좌표값이 다갹형을 구성하는 시계 또는 반시계 방향으로 주어져야 사용 가능하고 변이 교차하는 경우는 사용할 수 없어 쓰임새가 제한적이다.(다시 볼 일 없다는 뜻)
계산법은 위 그림과 같이 [{(적색 화살표의 곱의 합) - (청색 화살표의 곱의 합)} / 2] 이다.
public class Main {
static BufferedReader br;
static StringTokenizer st;
static StringBuilder sb;
public static void main(String[] args) throws Exception { // 사용 예
Point[] pArr = new Point[4];
pArr[0] = new Point(0, 0);
pArr[1] = new Point(0, 10);
pArr[2] = new Point(10, 10);
pArr[3] = new Point(10, 0);
System.out.println(shoelace(pArr));
}
static double shoelace(Point[] pArr) { // 신발끈 공식
double sum1 = 0;
double sum2 = 0;
for (int i = 0; i < pArr.length; i++) {
if (i == pArr.length - 1) {
sum1 += pArr[i].x * pArr[0].y;
sum2 += pArr[i].y * pArr[0].x;
continue;
}
sum1 += pArr[i].x * pArr[i + 1].y;
sum2 += pArr[i].y * pArr[i + 1].x;
}
return Math.abs(sum1 - sum2) / 2;
}
static class Point { //좌표 클래스
Double x, y;
public Point(double x, double y) {
this.x = x;
this.y = y;
}
}
}
'Algorithm > Stamps' 카테고리의 다른 글
[JAVA] 그래프와 다익스트라 (0) | 2024.11.03 |
---|---|
[C#, JAVA] n이하의 소수 리스트 (0) | 2022.08.19 |
[C#] 세그먼트 트리 (0) | 2022.08.17 |