AOJ MOON
SOL)
원 2개가 겹치는 부분 S를 작은원에서 빼주면 답이다.
제2 코사인 법칙, 부채꼴의 넓이, 삼각형의 넓이 공식들을 적절히 이용하면 된다.
#include<cstdio>
#include<cmath>
const double PI = 3.141592;
double calpart(double a, double b, double c) {
double seta, sector, tri;
//각도를 구한다.
seta = (acos((a*a + b*b - c*c) / (2 * a*b)));
//부체꼴의 넓이를 구한다.
sector = a*a*seta;
//삼각형의 넓이를 구한다.
tri = a*a*sin(2 * seta) / 2;
return sector - tri;
}
int main(){
int T; scanf("%d", &T);
while (T--){
double a, b, c; scanf("%lf%lf%lf", &a, &b, &c);
//작은원에서 각 2개의 부분을 빼준다.
printf("%.3lf\n", a*a*PI - calpart(a, c, b) - calpart(b, c, a));
}
}
#include<cmath>
const double PI = 3.141592;
double calpart(double a, double b, double c) {
double seta, sector, tri;
//각도를 구한다.
seta = (acos((a*a + b*b - c*c) / (2 * a*b)));
//부체꼴의 넓이를 구한다.
sector = a*a*seta;
//삼각형의 넓이를 구한다.
tri = a*a*sin(2 * seta) / 2;
return sector - tri;
}
int main(){
int T; scanf("%d", &T);
while (T--){
double a, b, c; scanf("%lf%lf%lf", &a, &b, &c);
//작은원에서 각 2개의 부분을 빼준다.
printf("%.3lf\n", a*a*PI - calpart(a, c, b) - calpart(b, c, a));
}
}
댓글 없음:
댓글 쓰기