2016년 7월 5일 화요일

세 점을 지나는 원 (3 Point Circle)

원 그래프를 그리는 것 중, 세 점을 지나는 원을 그리는 내용이다. 먼저 점 3개가 주어졌다고 하자.
이 때, 이 세 점을 지나는 원의 중점은 다음 그림과 같이 두 점씩을 이은 선의 수직 이등분선의 교점이 된다. 이 때, 연결선은 임의의 두 점을 선택해도 무방하다.
여기서는 위와 같이 연결선을 만들었다고 가정한다.
그러면, 각 선의 기울기는 다음과 같다.


기울기를 rd라고 둔 이유는 빨강색 선의 기울기가 중요한 것이 아니기 때문에, 중점을 찾는 직접적인 선인 파랑색 선의 기울기를 d라고 두기 위해서이다. 위의 식을 이용하면, 수직 이등분 선은 기울기가 음의 역수이고, 중점을 지나는 직선이므로, 두 파랑색 선은 다음과 같이 된다.



여기서 d는 rd의 역수이다. 이제 이 둘의 교점을 구해야 하는데, 교점에서는 두 식에 대해 x, y가 동일하므로, 교점에서는 이 둘의 x와 y를 같은 것으로 봐도 된다. (교점이 아니면, 두 식에서의 x, y가 모두 같은 지점은 없다.) 따라서, 연립하여 풀면, 교점의 x를 얻을 수 있다.

이 식이 세 점을 지나는 원의 중점의 x좌표가 된다. y 좌표는 당연히 위의 파랑색 선의 직선 방정식에 이 x를 대입하여 얻을 수 있다.
그러면 원의 방정식에 의해 반지름 r도 다음의 식으로 바로 얻을 수 있다.

여기서 xc와 yc는 각각 앞서 구한, 원의 중점의 x좌표와 y좌표이다.
이상의 과정을 통해 세점을 지나는 원의 방정식을 구하고, 이를 이용하여 주어진 점 외의, 임의의 위치에서 y값을 구하는 예를 보여주는 간단한 matlab 코드를 만들어 보면 다음과 같다.

%3점의 좌표를 입력
x1=0;
y1=-0.1;
x2=15000;
y2=2.1;
x3=30000;
y3=0;

%두 수직 이등분선의 기울기를 입력
d1=(x2-x1)/(y2-y1);
d2=(x3-x2)/(y3-y2);

%원의 중점을 구함
cx=((y3-y1)+(x2+x3)*d2-(x1+x2)*d1)/(2*(d2-d1))
cy=-d1*(cx-(x1+x2)/2)+(y1+y2)/2

%원의 반지름을 구함
r=sqrt((x1-cx)^2+(y1-cy)^2)

%임의의 x좌표에서 원의 y값을 구함
x=22500
y1=sqrt(r^2-(x-cx)^2)+cy

댓글 없음:

댓글 쓰기