삼각형의 세 꼭지점 A, B, C에 대한 외접원의 반지름 r과 중심점 O는 다음과 같이 구할 수 있다.
위의 수식에서는 삼각형의 꼭지점 A, B, C의 벡터와 외접원의 중심점 O의 벡터로 표현되었다.
/* tri : given triangle
* org : the center of circumscribed-circle
* return value : the radius of circumscribed-circle */
real_t triangle_circumcircle(point_t *org, triangle_t *tri)
{
real_t area, a, b, c;
real_t alpha, beta, gamma;
point_t *A, *B, *C;
point_t *d1, *d2, *d3;
assert(org);
assert(tri);
A = tri->a, B = tri->b, C = tri->c;
area = parallelogram_area_of_3points(A, B, C);
a = distance_between_points(B, C);
b = distance_between_points(C, A);
c = distance_between_points(A, B);
d1 = point_new();
d2 = point_new();
point_subtract(d1, A, B);
point_subtract(d2, A, C);
alpha = a * point_dotproduct(d1, d2) / (2 * sqr(area));
point_subtract(d1, B, A);
point_subtract(d2, B, C);
beta = b * point_dotproduct(d1, d2) / (2 * sqr(area));
point_subtract(d1, C, A);
point_subtract(d2, C, B);
gamma = c * point_dotproduct(d1, d2) / (2 * sqr(area));
point_destroy(d2);
point_destroy(d1);
org->x = alpha * A->x + beta * B->x + gamma * C->x;
org->y = alpha * A->y + beta * B->y + gamma * C->y;
org->z = alpha * A->z + beta * B->z + gamma * C->z;
return a*b*c/(2*area);
}
sdfgdfgd
답글삭제