저번 글에서 원의 세 원의 교점을 이용해 위치를 구할 수 있다는 것까지 알아보았다.

이번에는 실제로 원의 교점을 이용하여 위치를 구해보자.

우선 대표적인 방법으로 두 원이 겹칠​ 때 그 두 교점을 지나는 직선의 방정식을 유도하고, 이 직선의 방정식의 교점을 찾는 방법이 있다.



그림으로 표현하면 위와 같다.

이것을 식으로 유도하려면?

우선 원의 방정식을 생각해 보자. 직교좌표계에서 원의 방정식은 이러한 형태로 나타난다.

$$(x-a)^2+(y-b)^2=r_1^2$$

우리는 세 원이 한 평면에 있음으로 직교좌표계를 설정할 때 한 원은 중심이 원점에, 다른 하나의 원은 한 축 위에, 나머지 한 원은 임의의 한 점에 놓을 수 있다.


(굳이 이렇게 놓는 이유는 계산이 편해지기 때문이다.)

위의 그림처럼 놓고 세 원에 대한 방정식을 세워 보면

$$x^2+y^2=r_1^2$$

$$(x-a)^2+y^2=r_2^2$$

$$ (x-b)^2+(y-c)^2=r_3^2$$

각각의 원에 대해 위의 방정식 3개를 유도할 수 있다.


여기까지 잘 따라왔다면 이제 직선의 방정식을 구해야 한다. 이를 위해서 원의 방정식을 연립하여 교선을 찾아야 한다.

( \(xy\) 직교좌표계 상의 어떠한 원의 방정식을 전개하든 \(x^2\)과 \(y^2\)이 등장한다. 그러므로 원의방정식 두개를 연립하면 \(x^2\)과 \(y^2\)이 소거되어 \(x\)와 \(y\)만으로 이루어진 직선의 방정식만 남게된다)

우선 위의 식들을 전개하면 각각 다음과 같다.


$$x^2+y^2=r_1^2$$

$$x^2-2ax+a^2+y^2=r_2^2$$

$$x^2-2bx+b^2+y^2-2cx+c^2=r_3^2$$


첫번째와 두번째, 두번째와 세번째, 첫번째와 세번째 식을 각각 연립하면 3개의 직선의 방정식을 유도할 수 있다. 이를 유도하면 다음과 같다.


$$2ax-a^2=r_1^2-r_2^2$$

$$(2b-2a)x+2cy-c^2=r_2^2-r_3^2$$

$$2bx-b^2+2cy-c^2=r_1^2-r_3^2$$


첫번째 식을 정리하면 다음과 같이 \(x\)성분만 남는다.


$$x=\frac{r_1^2-r_2^2+a^2}{2a}$$


두 원의 중심이 한 축 위에 있음으로 이 두원의 교점으로 유도된 직선의 방정식은 무조건 그 축에 수직이기 때문이다. 덕분에 수월해진다.

이 후 이론상으로는 세 직선이 한 점에서만 만나기 때문에 두 직선의 교점만 구해도 위치를 구할 수 있다.


그러므로 \(x\)성분에 대해 정리된 식을 2번째 식에 대입하면 우리가 원하는 교점이 도출된다.

대입하면


$$\frac{(2b-2a)(r_1^2-r_2^2+a^2)}{2a}+2cy-c^2=r_2^2-r_3^2$$


이를  \(y\) 성분에 대해 정리하면


$$y=\frac{r_2^2-r_3^2+c^2}{2c}-\frac{(2b-2a)(r_1^2-r_2^2+a^2)}{4ac}$$


그러므로 결과적으로


$$x=\frac{r_1^2-r_2^2+a^2}{2a}$$

$$y=\frac{r_2^2-r_3^2+c^2}{2c}-\frac{(2b-2a)(r_1^2-r_2^2+a^2)}{4ac}$$


위 두 식을 계산하면 우리가 원하는 위치 (\(x\),\(y\))를 얻을 수 있다.

그러면 이 수식을 코드로 바꾸어 보자

이처럼 간단히 파이썬 코드로 바꾸어 구현할 수 있다.

하지만 이렇게 위치를 구해도 끝이 아닌것이 실제 상황에서는 오차가 발생하여 세 원이 한 점에서 만나지 않는 경우가 대부분이다.

다음에는 이 오차를 수학적으로 계산하고, 이를 고려한 위치를 출력하는 것을 해 볼 것이다.


부족한 글 읽어주셔서 감사합니다^^

오타나 오류가 있으면 지적 부탁드립니다ㅎㅎ

'Math' 카테고리의 다른 글

iBeacon(비콘)을 이용한 위치 측정  (8) 2015.12.02

+ Recent posts