[C++]다각형의 면적 - 백준2166
문제
풀이
문제 해석을 하자면,
- 다각형의 면적을 구하는 문제이다.
풀이
- 다각형의 면적은 한 점을 기준으로 모든 점을 외적한 값을 더하면 된다.
- 마지막에는 꼭 abs로 한 번 감싸주고 나누기 2.0를 해주자.
코드
#include<iostream>
using namespace std;
struct point {
long long x; long long y;
};
typedef point Point;
long long ccw2(Point a, Point b) {
return a.x * b.y - a.y * b.x;
}
long long ccw(Point r, Point a, Point b) {
a.x -= r.x;
a.y -= r.y;
b.x -= r.x;
b.y -= r.y;
return ccw2(a, b);
}
// 모든 외적의 값을 더한다.
double area(Point inPoint[], int N) {
double result = 0;
// 기준점 : inPoint[0]
for (int i = 1; i < N; i++) {
int ret = (i + 1) % N; // 마지막에 인덱스 n을 0으로 바꿔서 연산하게 됨
result += ccw(inPoint[0], inPoint[i], inPoint[ret]);
}
return abs(result)/2.0;
}
Point inPoint[10005];
int N;
int i, j, k;
int main() {
// input
cin >> N;
for (i = 0; i < N; i++)
cin >> inPoint[i].x >> inPoint[i].y;
// run % output
printf("%.1lf" , area(inPoint, N));
return 0;
}
느낀점
생략
댓글남기기