세 점 A, B, C가 만드는 삼각형의 외접원의 반지름을 구해보자. 세 변을 나타내는 벡터는

a=OCOB,b=OAOC,c=OBOA.

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

a×b0

를 만족해야 한다. 

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

sinθ=a/2R.

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

area=12bcsinθ    abc4R.

또한, 삼각형의 면적을 세 점이 일직선 위에 있는가를 테스트하는 식으로 표현하면 

area=12|a×b|

처럼 쓸 수 있다. 따라서 삼각형의 외접원의 반지름은 아래처럼 주어진다.

R=abc4area=|a||b||c|2|a×b|.

double circumradius(CPoint A, CPoint B, CPoint C) {
    double ax = C.x - B.x, ay = C.y - B.y;
    double bx = A.x - C.x, by = A.y - C.y;
    double crossab = ax * by - ay * bx;
    if (crossab != 0) { 
        double a = hypot(ax, ay);
        double b = hypot(bx, by); 
        double cx = B.x - A.x, cy = B.y - A.y;       
        double c = hypot(cx, cy);
        return (0.5 * a * b * c / fabs(crossab));
    } else 
        return 0;   //collinear
};
728x90
,