거리 T, 기울기 M, 주어진 점 (px, py)일 때, 주어진 점을 지나면서 기울기가 M인 직선 위에 있는 점 
중에서, 주어진 점과 거리가 T만큼 떨어져 있는 점 찾기
몬테카를로 방법.

error1 = 0.01 // 거리 오차값
error2 = 0.01 // 기울기 오차값
(x,y)=(px,py) // 처음엔 거기서 출발합니다

while(1){ // 될때까지 무한반복
(ran_x,ran_y)=(rand(),rand()) //적당히 랜덤한 좌표 하나를 만듭니다
(x_backup, y_backup)=(x,y) // 일단 백업해두고
(x,y)=(x,y)+(ran_x,ran_y) //그쪽으로 갑니다
if abs(distance((x,y),(px,py)) - T) < abs(distance((x_backup,y_backup),(px,py)) - T)
|| abs(tangent((x,y),(px,py)) - M) < abs(tangent((x_backup,y_backup),(px,py)) - M)
then (x,y)=(x_backup,y_backup) // 비교해서 더 조건이 나빠졌으면 원래대로 돌아감.
if abs(distance((x,y),(px,py)) - T) < error1 && abs(tangent((x,y),(px,py)) - M)
< error2 then { //비교해서 기준치를 만족하면 탈출
print((x,y))
exit
}
}

rand() //난수를 발생시킵니다. 적당한 함수 정의를 통하여 0부터 T사이의 난수만
발생시키기로 합니다.
abs() //입력받은 실수의 절대값을 반환합니다
distance() //두 점 사이의 거리를 실수값으로 알려줍니다
tangent() //두 점이 만드는 직선의 기울기를 알려줍니다
print() //입력받은 점을 출력합니다
by snowall 2008. 7. 6. 03:49
  • goldenbug 2008.07.06 07:11 신고 ADDR EDIT/DEL REPLY

    학교 다닐 때 전산물리 프로그래밍 하던 생각이 나는군요.
    기말고사에 몬테카를로 방법을 사용한 원의 넓이를 구하라는 문제가 나왔었죠.
    무식하게 코딩을 시험지에다가 하라고 해서 당황했었던...^^;

    • snowall 2008.07.06 10:18 신고 EDIT/DEL

      실험으로 해도 되죠. 시간만 있으면 -_-;