Advertisement
Guest User

F

a guest
Feb 21st, 2020
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.40 KB | None | 0 0
  1. #include <cmath>
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. struct Point
  6. {
  7.     double x, y;
  8.     Point(double x, double y)
  9.     {
  10.         this->x = x;
  11.         this->y = y;
  12.     }
  13.  
  14.     Point operator *(double k) const
  15.     {
  16.         return Point(x * k, y * k);
  17.     }
  18.  
  19.     Point operator +(const Point& p) const
  20.     {
  21.         return Point(x + p.x, y + p.y);
  22.     }
  23. };
  24.  
  25. double getT(double x0, double y0, double a, double b, double x, double y, double v)
  26. {
  27.     double A = v * v - a * a - b * b;
  28.     double B = -2 * (a * (x0 - x) + b * (y0 - y));
  29.     double C = -(x0 - x) * (x0 - x) - (y0 - y) * (y0 - y);
  30.  
  31.     double D = B * B - 4 * A * C;
  32.  
  33.     double t = (-B + sqrt(D)) / (2 * A);
  34.     return t;
  35. }
  36.  
  37. double getT(Point a, Point da, Point c, double v)
  38. {
  39.     return getT(a.x, a.y, da.x, da.y, c.x, c.y, v);
  40. }
  41.  
  42.  
  43. double solve(Point a, Point b, Point da, Point db, Point c, double v)
  44. {
  45.     double t1 = getT(a, da, c, v);
  46.     a = a + da * t1;
  47.     b = b + db * t1;
  48.  
  49.     double t2 = getT(b, db, a, v);
  50.  
  51.     return t1 + t2;
  52. }
  53.  
  54.  
  55. int main(int argc, char* argv[])
  56. {
  57.     int x1, y1, dx1, dy1;
  58.     int x2, y2, dx2, dy2;
  59.     int x, y, v;
  60.  
  61.     scanf("%d%d%d%d", &x1, &y1, &dx1, &dy1);
  62.     scanf("%d%d%d%d", &x2, &y2, &dx2, &dy2);
  63.     scanf("%d%d%d", &x, &y, &v);
  64.  
  65.     Point a(x1, y1);
  66.     Point da(dx1, dy1);
  67.  
  68.     Point b(x2, y2);
  69.     Point db(dx2, dy2);
  70.  
  71.     Point c(x, y);
  72.  
  73.     double A = solve(a, b, da, db, c, v);
  74.     double B = solve(b, a, db, da, c, v);
  75.  
  76.     double res = min(A, B);
  77.     printf("%.11f\n", res);
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement