#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string.h>
#include <stack>
#include <vector>
#include <set>
#include <cmath>
using namespace std;

#define REP(i, n) for (int i = 0; i < n; ++i)
#define PB push_back
#define MP make_pair


const double eps = 1e-8;
const double PI  = acos(-1.0);

int sgn(double x) { return x > eps ? 1 : x < -eps ? -1 : 0;}
double sqr(double x) { return x*x; }

//莠檎サエ轤ケ
struct pt
{
    double x,y;
    pt(double _x = 0,double _y = 0) { x = _x; y = _y;}
    pt operator + (const pt &a) const { return pt(x+a.x, y+a.y);}
    pt operator - (const pt &a) const { return pt(x-a.x, y-a.y);}
    pt operator * (const double r) const { return pt(x * r, y * r);}
    pt operator / (const double r) const { return pt(x / r, y / r);}
    
	bool operator == (const pt &a) const { return sgn(x-a.x) == 0 && sgn(y-a.y) == 0; }
    
	double len() { return sqrt(x*x + y*y); }
    double ang() { return atan2(y, x); }
	
	pt unit() { double l = len(); return pt(x/l, y/l); }
	pt per()  { return pt(-y, x); }
    pt trunc(double s) { return unit() * s; }
    pt rotate(double ang) { return pt(x*cos(ang)-y*sin(ang), x*sin(ang)+y*cos(ang)); }
	void read() { scanf("%lf%lf",&x,&y);}
    void write() { printf("(%.2f, %.2f) ",x, y); }
};

double det(const pt &a,const pt &b) { return a.x*b.y - a.y*b.x; }
double dot(const pt &a,const pt &b) { return a.x*b.x + a.y*b.y; } 

double dis(const pt &a,const pt &b) { return sqrt((a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y));}

double vp, v, r, v_ang, R;
pt a, b, peak;
pt o(0, 0);
double tangent_ang, start_ang;
double tangent_dis;

double Angle(pt a, pt b) {
    double ang = atan2(a.y, a.x) - atan2(b.y, b.x);
    if (ang > PI+eps) ang -= 2*PI;
    if (ang < -PI+eps) ang += 2*PI;
    return ang;
}
bool in(double l, double r, double ang) {
    return sgn(ang-l) > 0 && sgn(ang-r) < 0;
}
bool intervalCover(double l, double r, double ang) {
    if (r > PI) {
        return in(l, PI, ang) || in(-PI, r-2*PI, ang); 
    } else {
        return in(l, r, ang);
    }
}
bool cover(double ang, double& t) {
    if (ang < tangent_ang) {
        t = dis(a, peak.rotate(ang)) / v;
    } else {
        double delta = ang - acos(r/R) - tangent_ang;
        double len = tangent_dis + PI*delta  + sqrt(R*R-r*r);
        t = len / v;
    }
    double end_ang = start_ang + t * v_ang;
    bool tmp = intervalCover(start_ang, end_ang, ang) || 
           intervalCover(start_ang, end_ang, -ang);
    cout << tmp << endl;
    return tmp;
}

int main() {
    b.read();
    scanf("%lf",&vp);
    
    a.read();
    scanf("%lf%lf",&v, &r);
    
    R = b.len();
    v_ang = vp / R;
    peak = a.trunc(R);
    
    start_ang = Angle(a, b);
    
    double d = a.len();
    tangent_ang = acos(r / d); 
    tangent_dis = sqrt(d*d-r*r);
    
    //printf("tangent_ang = %f\n",tangent_ang);
    
    double meet, ans;
    double l = 0.0, r = PI;
    for (int run = 0; run < 100; ++run) {
        double mid = (l + r) * 0.5;
        if (cover(mid, meet)) {
            l = mid;
        } else {
            r = mid;
            ans = meet;
        }            
    }
    printf("%.10f\n",ans);
}