#include namespace { #pragma GCC diagnostic ignored "-Wunused-function" #include #pragma GCC diagnostic warning "-Wunused-function" using namespace std; using namespace atcoder; #define rep(i,n) for(int i = 0; i < (int)(n); i++) #define rrep(i,n) for(int i = (int)(n) - 1; i >= 0; i--) #define all(x) begin(x), end(x) #define rall(x) rbegin(x), rend(x) template bool chmax(T& a, const T& b) { if (a < b) { a = b; return true; } else return false; } template bool chmin(T& a, const T& b) { if (b < a) { a = b; return true; } else return false; } using ll = long long; using P = pair; using VI = vector; using VVI = vector; using VL = vector; using VVL = vector; } int main() { ios::sync_with_stdio(false); cin.tie(0); int tt; cin >> tt; cout << fixed << setprecision(16); while (tt--) { double x1, y1, r1, x2, y2, r2; cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2; double dx = x2 - x1, dy = y2 - y1; double d2 = dx * dx + dy * dy; double ra = r1 + r2, rs = r1 - r2; double tmp1 = r1 * sqrt(d2 - ra * ra); double tmp2 = r1 * sqrt(d2 - rs * rs); double ans = 0; for (auto [a, b] : { pair((dx * ra * r1 + dy * r1 * tmp1) / d2, (dy * ra * r1 - dx * r1 * tmp1) / d2), pair((dx * ra * r1 - dy * r1 * tmp1) / d2, (dy * ra * r1 + dx * r1 * tmp1) / d2), pair((dx * rs * r1 + dy * r1 * tmp2) / d2, (dy * rs * r1 - dx * r1 * tmp2) / d2), pair((dx * rs * r1 - dy * r1 * tmp2) / d2, (dy * rs * r1 + dx * r1 * tmp2) / d2) }) { // a(x-x1)+b(y-y1)=r1^2 double c = -(a * x1 + b * y1 + r1 * r1); double mx = 0; for (auto x : {a, b, c}) chmax(mx, abs(x)); ans += abs(a + b + c) / mx; } cout << ans << '\n'; } }