/* Author: ACb0y Date: 2010年12月30日23:09:49 Type: 三分 ProblemID: hdu 3400 Line belt */ #include <iostream> #include <cmath> #define eps 1e-5 using namespace std; struct point { double x; double y; }; point data[4]; double p, q, r; double dis(point a, point b) { return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y)); } double get_ans(point a, point b) { return dis(data[0], a) / p + dis(a, b) / r + dis(b, data[3]) / q; } double get_b_c(point transfer) { point left, right, mid, midmid; left = data[2]; right = data[3]; double mid_value, midmid_value; do { mid.x = (left.x + right.x) / 2; mid.y = (left.y + right.y) / 2; midmid.x = (mid.x + left.x) / 2; midmid.y = (mid.y + left.y) / 2; mid_value = get_ans(transfer, mid); midmid_value = get_ans(transfer, midmid); if (midmid_value > mid_value){ left = midmid; } else { right = mid; } } while (dis(left, right) > eps); return mid_value < midmid_value ? mid_value : midmid_value; } int main() { freopen("in.txt", "r", stdin); int cas; scanf("%d", &cas); while (cas--) { for (int i = 0; i < 4; ++i) { scanf("%lf%lf", &data[i].x, &data[i].y); } scanf("%lf%lf%lf", &p, &q, &r); point left, right, mid, midmid; double mid_value; double midmid_value; left = data[0]; right = data[1]; do { mid.x = (left.x + right.x) / 2; mid.y = (left.y + right.y) / 2; midmid.x = (mid.x + left.x) / 2; midmid.y = (mid.y + left.y) / 2; mid_value = get_b_c(mid); midmid_value = get_b_c(midmid); if (midmid_value > mid_value) { left = midmid; } else { right = mid; } } while (dis(left, right) > eps); double ans = mid_value < midmid_value ? mid_value : midmid_value; printf("%.2lf/n", ans); } return 0; }