외접원 구하기
// (x1, y1), (x2, y2), (x3, y3) 삼각형의 세 꼭지점
// (x0, y0) - 외접원의 중심
// r - 외접원의 반지름
void circumscribedCircle(const float x1, const float y1, const float x2, const float y2, const float x3, const float y3, float* x0, float* y0, float r)
{
// (x1, y1), (x2, y2), (x3, y3) 세 점 중 2개 이상이 같거나
// 세 점이 일직선 상에 있으면 안된다.
// divide by 0 조건도 피해야 한다.
// 1. y1 - y2 = 0
// 2. y1 - y2 = 0
// 3. (x1 - x3 - (y1 - y3) * (x1 - x2) / (y1 - y2)) = 0
// 4. x1 - x2 = 0
*x0 = (pow(y1, 2) + pow(x1, 2) - pow(y3, 2) - pow(x3, 2) - (y1 - y3) * (pow(y1, 2) + pow(x1, 2) - pow(y2, 2) - pow(x2, 2)) / (y1 - y2)) / 2 / (x1 - x3 - (y1 - y3) * (x1 - x2) / (y1 - y2));
*y0 = (pow(y1, 2) + pow(x1, 2) - pow(y2, 2) - pow(x2, 2) - 2 * x0 * (x1 - x2)) / (y1 - y2) / 2;
*r = sqrt(pow(x3 - x0, 2) + pow(y3 - y0, 2));
}
// (x1, y1), (x2, y2), (x3, y3) 삼각형의 세 꼭지점
// (x0, y0) - 외접원의 중심
// r - 외접원의 반지름
void circumscribedCircle(const float x1, const float y1, const float x2, const float y2, const float x3, const float y3, float* x0, float* y0, float r)
{
// (x1, y1), (x2, y2), (x3, y3) 세 점 중 2개 이상이 같거나
// 세 점이 일직선 상에 있으면 안된다.
// divide by 0 조건도 피해야 한다.
// 1. y1 - y2 = 0
// 2. y1 - y2 = 0
// 3. (x1 - x3 - (y1 - y3) * (x1 - x2) / (y1 - y2)) = 0
// 4. x1 - x2 = 0
*x0 = (pow(y1, 2) + pow(x1, 2) - pow(y3, 2) - pow(x3, 2) - (y1 - y3) * (pow(y1, 2) + pow(x1, 2) - pow(y2, 2) - pow(x2, 2)) / (y1 - y2)) / 2 / (x1 - x3 - (y1 - y3) * (x1 - x2) / (y1 - y2));
*y0 = (pow(y1, 2) + pow(x1, 2) - pow(y2, 2) - pow(x2, 2) - 2 * x0 * (x1 - x2)) / (y1 - y2) / 2;
*r = sqrt(pow(x3 - x0, 2) + pow(y3 - y0, 2));
}