코드/C++

[C++] 3점을 지나는 외접원의 중심점 구하기

야곰야곰+책벌레 2021. 4. 20. 15:23
728x90
반응형

3점을 지나는 원은 통상 삼각형의 외접원(CircumCircle)이라고변의 중심에서 내린 수선이 만나는 지점이다.

 

이때 넓이는 헤론(Heron)의 공식에 의해서

 

가 된다.

 

물론,

가정이 있다.

헤론의 공식으로 넓이를 구하면

사인(Sin) 법칙의 응용으로 외접원의 반지름을 구할 수 있다.

 

그렇다고 원의 중심을 구할 수 있는 것은 아니다.

결국 원의 중심을 구하기 위해서는 각 변의 중심을 잇는 수선을 구해서 교차점을 구해야 한다.

 

// 외접원의 중심 구하기
double d, d2, yi;
Point2D[] CenPoint = new Point2D[2];

for (int i = 0; i < 2; i++)
	CenPoint[i] = new Point2D();

// 각 변의 중심점 구하기
CenPoint[0].x = 0.5 * (Point[0].x + Point[1].x);
CenPoint[0].y = 0.5 * (Point[0].y + Point[1].y);
CenPoint[1].x = 0.5 * (Point[0].x + Point[2].x);
CenPoint[1].y = 0.5 * (Point[0].y + Point[2].y);

double a1 = -1 * (Point[0].x - Point[1].x) / (Point[0].y - Point[1].y);
double b1 = CenPoint[0].y - a1 * CenPoint[0].x;
double a2 = -1 * (Point[0].x - Point[2].x) / (Point[0].y - Point[2].y);
double b2 = CenPoint[1].y - a2 * CenPoint[1].x;


// 평행한 선은 만날 수 없다.
if (a1 == a2)
	return -1;
    
cx = (b2 - b1) / (a1 - a2);
cy = a1 * cx + b1;
728x90
반응형

'코드 > C++' 카테고리의 다른 글

libjpeg 사용하기  (0) 2022.08.23
[C++] 마우스 이벤트 후킹  (0) 2022.05.11
[C++] string ↔ wstring 변환  (4) 2022.02.24
[C++] XMLLite를 이용한 XML 파일 읽어오기  (0) 2021.11.08
[C++] Char의 형 변환  (0) 2021.04.20