세 개의 점 A, B, C가 만드는 삼각형의 외접원의 반지름을 구해보자. 


우선 세점이 일직선상에 놓이지 않기 위해서는 


이어야 한다. 

그림의 삼각형에서 각(BOC)가 각(BAC)의 두배이므로,


이 각도를 이용하면 삼각형의 면적은 세 변의 길이(a, b, c)와 외접원의 반지름(R)로 표현된다:


또한, 삼각형의 면적이 세 점이 직선상에 있는가를 테스트 하는 값으로 아래 식처럼 쓰여지므로,


외접원의 반지름은 다음과 같이 구할 수 있다:


#define SQR(x) ((x)*(x))

double circumradius(CPoint A, CPoint B, CPoint C) {

double ax = C.x - B.x; 

double ay = C.y - B.y;

double bx = A.x - C.x; 

double by = A.y - C.y;

double crossab = ax * by - ay * bx;

if (crossab != 0.) { 

double a = sqrt(SQR(ax) + SQR(ay));

double b = sqrt(SQR(bx) + SQR(by)); 

double cx = B.x - A.x; 

double cy = B.y - A.y;       

double c = sqrt(SQR(cx) + SQR(cy));

return (0.5 * a * b * c/fabs(crossab));

else

return ( -1.0 ); 

}


Posted by helloktk

댓글을 달아 주세요