Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cmath>
- #include <iostream>
- using namespace std;
- struct Point
- {
- double x, y;
- Point(double x, double y)
- {
- this->x = x;
- this->y = y;
- }
- Point operator *(double k) const
- {
- return Point(x * k, y * k);
- }
- Point operator +(const Point& p) const
- {
- return Point(x + p.x, y + p.y);
- }
- };
- double getT(double x0, double y0, double a, double b, double x, double y, double v)
- {
- double A = v * v - a * a - b * b;
- double B = -2 * (a * (x0 - x) + b * (y0 - y));
- double C = -(x0 - x) * (x0 - x) - (y0 - y) * (y0 - y);
- double D = B * B - 4 * A * C;
- double t = (-B + sqrt(D)) / (2 * A);
- return t;
- }
- double getT(Point a, Point da, Point c, double v)
- {
- return getT(a.x, a.y, da.x, da.y, c.x, c.y, v);
- }
- double solve(Point a, Point b, Point da, Point db, Point c, double v)
- {
- double t1 = getT(a, da, c, v);
- a = a + da * t1;
- b = b + db * t1;
- double t2 = getT(b, db, a, v);
- return t1 + t2;
- }
- int main(int argc, char* argv[])
- {
- int x1, y1, dx1, dy1;
- int x2, y2, dx2, dy2;
- int x, y, v;
- scanf("%d%d%d%d", &x1, &y1, &dx1, &dy1);
- scanf("%d%d%d%d", &x2, &y2, &dx2, &dy2);
- scanf("%d%d%d", &x, &y, &v);
- Point a(x1, y1);
- Point da(dx1, dy1);
- Point b(x2, y2);
- Point db(dx2, dy2);
- Point c(x, y);
- double A = solve(a, b, da, db, c, v);
- double B = solve(b, a, db, da, c, v);
- double res = min(A, B);
- printf("%.11f\n", res);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement