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

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

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



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

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

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

$$(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\))를 얻을 수 있다.

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

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

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

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


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

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

  1. 박성아 2016.08.02 12:37

    와..ㅠㅠㅠ 수학식 계산으로 들어가니 이해하기가 너무 어렵네요 ㅠㅠ

    • ghatdev 2016.08.02 13:23 신고

      언뜻 보면 복잡해보이지만 실상은 원의 방정식과 연립방정식이 전부입니다ㅎㅎ 한줄한줄 직접 유도해보시명 쉽게 금방 하실 수 있으세요

  2. Ha 2016.08.28 15:37

    감사합니다 좋은 정보 잘 읽고갑니다.

  3. 너무너무재밋네요 2016.08.29 10:33

    3편이 기대됩니다 ^^

  4. 취준생 2016.09.05 20:11

    글이 너무 좋네요 ~ 다름이 아니라 이번에 제가 졸업논문을 쓰는데 비콘 2개를 이용해서 두개의 신호의 강도에 따라 약한쪽에 어떤 액션을 취하고 또 양쪽을비교해서 약한쪽에 어떤 액션을 취하게 하고 싶은데 도저히 감이 잡히질 않습니다. 조금만 팁을 주시면 안될까요?

    • ghatdev 2016.09.05 21:23 신고

      잘 읽어주셔서 감사합니다ㅎㅎ
      비콘 2개를 이용할 때 어떤 조건인지를 조금더 자세히 설명해 주실 수 있으세요? 열린 공간인지, 장애물은 없는지 말이에요
      혹시 2개 비콘에서 등거리를 유지하며 직선으로 나아가는 액션을 취하시려는 건가요?

  5. kafka 2016.10.18 15:36

    실내 네비게이션을 구현해 보려다 여기 들어왔는데요.
    위의 공식으로 실제 비콘에서 송신된 데이터로 값을 알아내려니 필자님 말씀대로 제대로 한점에서 만나지 않는 것 같습니다. T.T
    3편은 언제쯤 올리실 생긱이신가요?

    혹시 3편에 올리실 내용을 미리 좀 알려주시면 안될런지요 ㅋㅋ

    • ghatdev 2016.12.12 14:07 신고

      늦어서 죄송합니다ㅠ 입시가 이제끝났네요. 빠른시일안에 3편 업로드하도록 하겠습니다!

  6. wskng 2017.02.15 07:56

    정말 좋은 내용이네요.
    혹시 다음 글은 언제 올리실 예정인지 궁금합니다.

  7. 장형민 2017.09.18 11:25

    좋은 글 감사드립니다.

    혹시 다음 편에서 진행 될 오차의 대한 수학적 계산이라는 것이 어떠한 원리로 되는지 간단하게 나마 알수 있을까요??

+ Recent posts