#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int main() {
cin.tie(NULL);
cout.tie(NULL);
ios::sync_with_stdio(false);
// 같은 원 (단 r이 모두 0일경우 1)
// 내접
// 외접
// 포함
// 완전 떨어짐
// 두점
int t;
int k = 0;
int x1, y1, r1, x2, y2, r2;
int dis; // 두좌표사이의 거리
int rdis1, rdis2;
cin >> t;
while (k != t) {
cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
dis = pow(x1 - x2, 2) + pow(y1 - y2, 2);
rdis1 = pow(r1 + r2, 2);
rdis2 = pow(r1 - r2, 2);
if (dis == 0 && r1 == 0 && r2 == 0) {
cout << "1" << "\n";
}
else if (dis == 0 && r1 == r2) {
cout << "-1" << "\n";
}
else if (dis == rdis2 || dis == rdis1) {
cout << "1" << "\n";
}
else if (dis > rdis1 || dis < rdis2) {
cout << "0" << "\n";
}
else {
cout << "2" << "\n";
}
k++;
}
}
이 문제는 두 원이 있을 때 몇 개의 점에서 만날 수 있는지 묻는 문제이다.
두 좌표는 원의 중심이며, r1, r2는 반지름이다.
따라서 이 문제를 같은 원인 경우(-1), 좌표는 같지만 반지름이 0인경우(1), 내접/외접인 경우(1), 만나지 않는 경우(포함하거나 완전히 떨어져있는 경우)(0), 일부 만나는 경우(2) 로 나누어서 문제를 해결했다.
dis (두 좌표의 거리의 제곱) 와 rdis1(두 반지름을 더한것의 제곱), rdis2(두 반지름의 차이의 제곱) 을 비교해서 두 원이 몇개의 점에서 만나는지를 알아내었다.