※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 2773번 문제인 바깥 삼각형의 중심이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/2773 

 

2773번: 바깥 삼각형의 중심

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 삼각형 ABC의 세 점의 좌표로 이루어져 있고, 한 줄에 한 점의 정보가 주어진다. 겹치는 점이나, 삼각형을 만들지 못하는 경우

www.acmicpc.net

문제에서 찾아야하는 점 O는 삼각형 ABC의 수심과 같다. 따라서 주어지는 삼각형의 수심의 좌표를 출력하는 것으로 문제를 해결할 수 있다.

 

글쓴이는 Barycentric coordinate(링크)를 이용하여 수심의 좌표를 계산해 출력하였다. Barycentric coordinate에 대한 자세한 내용은 링크를 참고하자.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;
typedef long double ld;

int T;
ld Ax, Ay, Bx, By, Cx, Cy;
ld a, b, c;
ld A, B, C;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cout << fixed;
	cout.precision(4);

	cin >> T;
	while (T--) {
		cin >> Ax >> Ay >> Bx >> By >> Cx >> Cy;
		a = (Bx - Cx) * (Bx - Cx) + (By - Cy) * (By - Cy);
		b = (Cx - Ax) * (Cx - Ax) + (Cy - Ay) * (Cy - Ay);
		c = (Ax - Bx) * (Ax - Bx) + (Ay - By) * (Ay - By);
		
		
		A = (a + b - c) * (c + a - b);
		B = (b + c - a) * (a + b - c);
		C = (c + a - b) * (b + c - a);

		ld total = A + B + C;
		A /= total, B /= total, C /= total;

		ld x = A * Ax + B * Bx + C * Cx, y = A * Ay + B * By + C * Cy;

		cout << x << ' ' << y << '\n';
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 26530 // C++] Shipping  (0) 2022.12.19
[BOJ 26489 // C++] Gum Gum for Jay Jay  (0) 2022.12.18
[BOJ 26264 // C++] 빅데이터? 정보보호!  (0) 2022.12.18
[BOJ 24449 // C++] カーペット (Carpet)  (0) 2022.12.18
[BOJ 5341 // C++] Pyramids  (0) 2022.12.18

+ Recent posts