이 문제는 알고리즘 보다는 기하학적인 문제이군요. -_-;
알고리즘 말고.. 수학공부도 많이 해야 할 것 같습니다.
원의 넓이 공식도 생각안나고 sin, cos 막 헥갈리고.. 좀 많이 헤맸습니다.
알고리즘은 무척 단순합니다.
일단 파리가 라켓에 스치기만 해도 죽으니까 다음을 적용합니다.
[spoiler="더 보기..."]라켓의 줄의 반지름 += 파리의 반지름.
테두리의 크기 += 파리의 반지름.
[/spoiler]
그러면 확률 계산법은 아래와 같이 됩니다.
[spoiler="더 보기..."]파리가 라켓에 맞을 확률 = (라켓의 줄과 테두리의 넓이) / (라켓의 전체 넓이)
= ( (라켓의 전체 넓이) - (구멍의 넓이의 합) ) / (라켓의 전체 넓이)[/spoiler]
구멍의 넓이를 구하는 방법은 라켓의 중심을 기준으로 x,y축으로 나눈 후 1-4분면을 계산해서 4를 곱하고,
각각의 넓이는 조건에 따라 3가지 경우가 있습니다.
[spoiler="더 보기..."]// 구멍의 좌표를 (x1, y1) - (x2, y2) 라 하면
if ( (x1, y1)까지의 거리 > R) // 구멍은 라켓 바깥에 있음.
면적 = 0;
else if ( (x2, y2)까지의 거리 < R) // 구멍은 라켓 안쪽에 있음.
면적 = (x2 - x1) * (y2 - y1);
else // 구멍이 라켓에 걸쳐져 있음.
면적 = 사각형과 원이 만나는 부분까지의 삼각형(or 사다리꼴)의 면적 + 원의 중심에서 시작하는 부채꼴의 면적 - 원의 중심에서 양 점을 가지고 그린 삼각형의 면적
[/spoiler]
모든 구멍에 대해서 면적을 합해서 확률을 계산하면 됩니다..
[spoiler="소스 보기"]~~~ c
하나반
이 문제는 알고리즘 보다는 기하학적인 문제이군요. -_-;
알고리즘 말고.. 수학공부도 많이 해야 할 것 같습니다.
원의 넓이 공식도 생각안나고 sin, cos 막 헥갈리고.. 좀 많이 헤맸습니다.
알고리즘은 무척 단순합니다.
일단 파리가 라켓에 스치기만 해도 죽으니까 다음을 적용합니다.
[spoiler="더 보기..."]라켓의 줄의 반지름 += 파리의 반지름.
테두리의 크기 += 파리의 반지름.
[/spoiler]
그러면 확률 계산법은 아래와 같이 됩니다.
[spoiler="더 보기..."]파리가 라켓에 맞을 확률 = (라켓의 줄과 테두리의 넓이) / (라켓의 전체 넓이)
= ( (라켓의 전체 넓이) - (구멍의 넓이의 합) ) / (라켓의 전체 넓이)[/spoiler]
구멍의 넓이를 구하는 방법은 라켓의 중심을 기준으로 x,y축으로 나눈 후 1-4분면을 계산해서 4를 곱하고,
각각의 넓이는 조건에 따라 3가지 경우가 있습니다.
[spoiler="더 보기..."]// 구멍의 좌표를 (x1, y1) - (x2, y2) 라 하면
if ( (x1, y1)까지의 거리 > R) // 구멍은 라켓 바깥에 있음.
면적 = 0;
else if ( (x2, y2)까지의 거리 < R) // 구멍은 라켓 안쪽에 있음.
면적 = (x2 - x1) * (y2 - y1);
else // 구멍이 라켓에 걸쳐져 있음.
면적 = 사각형과 원이 만나는 부분까지의 삼각형(or 사다리꼴)의 면적 + 원의 중심에서 시작하는 부채꼴의 면적 - 원의 중심에서 양 점을 가지고 그린 삼각형의 면적
[/spoiler]
모든 구멍에 대해서 면적을 합해서 확률을 계산하면 됩니다..
[spoiler="소스 보기"]~~~ c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
16년 전