#include <cstdio>
#include <iostream>
#include <cmath>
#include <assert.h>

using namespace std;

const double eps = 1e-6;

struct point
{
	long long x, y;
};

long long area (point a, point b, point c) {
	return (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x);
}
bool intersection(point a, point b, point c, point d)
{
	return area(a,b,c) * area(a,b,d) <= 0
		&& area(c,d,a) * area(c,d,b) <= 0;
}

long double rast(point a, point b)
{
	return sqrt((long double)((a.x - b.x) * (a.x - b.x)) + (a.y - b.y) * (a.y - b.y)); 
}

int main()
{
	freopen("travelator.in", "r", stdin);
	freopen("travelator.out", "w", stdout);
	point fn;
	point be, en;
	long double v, w;
	cin >>  fn.x >> fn.y ;
    assert(-10000 <= fn.x && fn.x <= 10000);
    assert(1 <= fn.y && fn.y <= 10000);
	cin >> be.x >> be.y >> en.x >> en.y >> w >> v;
    assert(-10000 <= be.x && be.x <= 10000);
    assert(1 <= be.y && be.y <= 10000);
    assert(-10000 <= en.x && en.x <= 10000);
    assert(1 <= en.y && en.y <= 10000);
    assert(eps <= w && w <= (50 + eps));
	assert(eps <= v && v <= (50 + eps));
    assert(!(fn.x == en.x && fn.y == en.y));
    assert(!(fn.x == be.x && fn.y == be.y));
	bool f = true;
	point p1, p2;
	p1.x = be.x - fn.x; p1.y = be.y - fn.y;
	p2.x = en.x - fn.x; p2.y = en.y - fn.y;
	if ((abs(p1.x*p2.y -p1.y*p2.x) < eps)&& ((be.x <= fn.x && fn.x <= en.x) || (be.x >= fn.x && fn.x >= en.x)) && 
		((be.y <= fn.y && fn.y <= en.y) || (be.y >= fn.y && fn.y >= en.y))) f = false;
	assert(f);
    if (fn.x == 0 && fn.y == 0)
	{
		cout << "0.000000" << endl;
		return 0;
	}
    point st;
	st.x = 0;
	st.y = 0;
	long double ans = (rast(st, be) + rast (en, fn)) / w + rast(be, en) / v;
	if (intersection(st, fn, be, en))
	{
		ans = min(ans, (rast(st, be) + rast(be, fn)) / w);
		ans = min(ans, (rast(st, en) + rast(en, fn)) / w);
	}
	else
		ans = min(ans, rast(st, fn) / w);
	cout.precision(6);
	cout << fixed << ans << endl;
}