http://jinh.tistory.com/549

하나의 케이크를 칼질 3번으로 5명이 나눠먹는 방법을 찾아야 한다.

그래서 난 다음과 같은 해법을 찾아보았다.


빨간색 선 A, B, C를 따라서 3번 칼질하면 된다. 문제는 a와 b의 위치이다. a는 잘랐을 때 전체의 1/5가 되는 지점이어야 하고 b는 잘랐을 때 전체의 2/5가 되는 지점이어야 한다. C는 A를 잘라서 쳐낸 후 나머지 부분을 지름을 따라 자르면 된다.

물론 이 문제는 간단한 적분을 해서 답을 구할 수 있다.
원의 방정식을 $$y = \sqrt{1-x^2}$$ 으로 가정하고 간단한 적분을 하면 (고등학교 수학이면 풀 수 있다. 못 풀겠으면 적분표 찾아보자.)
$$\cos^{-1}(a) - a\sqrt{1-a^2} = 0.1\pi$$

마찬가지 방법으로 b도 구할 수 있는데 자세한 설명은 생략하도록 하고, 어쨌든 중요한건 위의 방정식은 초월방정식이라 근의 공식이 없다. (5차방정식보다 큰 차수의 방정식은 근의 공식이 없는데, 초월방정식은 무한차수 방정식이라서 없다.)

따라서 원의 방정식을 x=1인 지점부터 x=a인 지점까지 적분을 해서 원 넓이의 1/5가 되는 지점을 찾아야 한다. 파이썬을 써보자.
import numpy
Integrated = 0.0
dx = 1.0E-8
x = 1.0
def circle(x):
    return numpy.sqrt(1.0-x*x)
while Integrated<=numpy.pi/5.0:
    x-=dx
    Integrated += 2.0*circle(x)*dx
print(x)

저기 중간에 numpy.pi를 2.0*numpy.pi로 고치면 원 넓이의 2/5가 되는 지점을 찾아주게 된다. 아니면 중간에 2.0을 1.0으로 고쳐도 된다. 어쨌든. 적분 방법이 사다리꼴 방법도 아닌 그냥 사각형 방법이긴 하지만 어차피 dx구간이 작아서 별 문제는 없다. x는 적분을 0에서부터가 아니라 1에서부터 시작하는데, 따라서 우리가 찾는 답은 1-x가 된다.

그렇게 하면 x = 0.508인 지점이 바로 1/5가 되는 지점이다. 대략 반지름의 절반정도 된다.
그리고 x=0.343인 지점이 바로 2/5가 되는 지점이다.

즉, 일단 오른쪽 끝에서부터 반지름의 0.5정도 되는 부분에서 잘라낸다. 그 다음 왼쪽 끝에서부터 반지름의 0.34배정도 되는 부분에서 잘라낸다. 그리고 두번째 잘라서 생긴 두 조각을 한번에 절반으로 자르면 된다.

0.000001%라도, 또는 그보다 더 정확하게 똑같아야 한다고 주장하는 사람이 있을 수 있다. 그런 사람은 원하는 오차를 알려주면 그보다 더 작은 오차로 자를 수 있는 정확한 수치를 언제나 알려줄 수 있다. (왜냐하면 리만 적분은 수렴하기 때문이다.) 아무리 작은 오차라도 0보다 큰 오차이기만 하면 된다.

by snowall 2012. 1. 21. 11:30