Advertisement
IlidanBabyRage

112743.cpp

Jul 23rd, 2015
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.33 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <cstdio>
  4.  
  5. using namespace std;
  6.  
  7. double getS(double ax, double ay, double bx, double by);
  8. double getScal(double x, double y, double ax, double ay, double bx, double by);
  9. void print(double ax, double ay, double bx, double by, double cx, double cy, double dx, double dy);
  10. void sortc(double &ax, double &ay, double &bx, double &by);
  11.  
  12. int main(){
  13.    
  14.     double ax, bx, ay, by, cx, dx, cy, dy, a1, a2, b1, b2, c1, c2, x, y;
  15.     cin >> ax >> ay >> bx >> by >> cx >> cy >> dx >> dy;
  16.  
  17.     if (ax == bx && ay == by && cx == dx && cy == dy)
  18.         if (ax == cx && ay == cy)
  19.             printf("%.10f %.10f\n", ax, ay);
  20.         else
  21.             printf("Empty\n");
  22.     else if (getS(bx - ax, by - ay, dx - cx, dy - cy) == 0)
  23.         if (getS(bx - ax, by - ay, cx - ax, cy - ay) == 0 && getS(dx - cx, dy - cy, ax - cx, ay - cy) == 0)
  24.             print(ax, ay, bx, by, cx, cy, dx, dy);
  25.         else
  26.             printf("Empty\n");
  27.     else{
  28.         a1 = by - ay;
  29.         b1 = ax - bx;
  30.         c1 = ay * (bx - ax) - ax * (by - ay);
  31.         a2 = dy - cy;
  32.         b2 = cx - dx;
  33.         c2 = cy * (dx - cx) - cx * (dy - cy);
  34.         if (a1 == 0){
  35.             y = (a1 * c2 / a2 - c1) / (b1 - a1 * b2 / a2);
  36.             x = -(c2 + b2 * y) / a2;
  37.         }else{
  38.             y = (a2 * c1 / a1 - c2) / (b2 - a2 * b1 / a1);
  39.             x = -(c1 + b1 * y) / a1;
  40.         }
  41.         if (getScal(x, y, ax, ay, bx, by) >= 0 && getScal(x, y, bx, by, ax, ay) >= 0 && getScal(x, y, cx, cy, dx, dy) >= 0 &&
  42.                 getScal(x, y, dx, dy, cx, cy) >= 0)
  43.             printf("%.10f %.10f\n", x, y);
  44.         else
  45.             printf("Empty\n");
  46.     }
  47.  
  48.  
  49.     return 0;
  50. }
  51.  
  52. double getS(double ax, double ay, double bx, double by){
  53.     return (bx * ay - ax * by);
  54. }
  55.  
  56. double getScal(double x, double y, double ax, double ay, double bx, double by){
  57.     return (x - ax) * (bx - ax) + (y - ay) * (by - ay);
  58. }
  59.  
  60. void print(double ax, double ay, double bx, double by, double cx, double cy, double dx, double dy){
  61.     if (ax == bx && ay == by)
  62.         if (getScal(ax, ay, cx, cy, dx, dy) >= 0 && getScal(ax, ay, dx, dy, cx, cy) >= 0)
  63.             printf("%.10f %.10f\n", ax, ay);
  64.         else
  65.             printf("Empty\n");
  66.     else if (cx == dx && cy == dy)
  67.         if (getScal(cx, cy, ax, ay, bx, by) >= 0 && getScal(cx, cy, bx, by, ax, ay) >= 0)
  68.             printf("%.10f %.10f\n", cx, cy);
  69.         else
  70.             printf("Empty\n");
  71.     else if (getScal(ax, ay, cx, cy, dx, dy) >= 0 && getScal(ax, ay, dx, dy, cx, cy) >= 0){
  72.         if (getScal(bx, by, cx, cy, dx, dy) <= 0){
  73.             sortc(ax, ay, cx, cy);
  74.             if (ax == cx && ay == cy)
  75.                 printf("%.10f %.10f\n", ax, ay);
  76.             else
  77.                 printf("%.10f %.10f\n%.10f %.10f\n", ax, ay, cx, cy);
  78.         }else{
  79.             sortc(ax, ay, dx, dy);
  80.             if (ax == dx && ay == dy)
  81.                 printf("%.10f %.10f\n", ax, ay);
  82.             else
  83.                 printf("%.10f %.10f\n%.10f %.10f\n", ax, ay, dx, dy);
  84.         }
  85.     }else if (getScal(bx, by, cx, cy, dx, dy) >= 0 && getScal(bx, by, dx, dy, cx, cy) >= 0){
  86.         if (getScal(ax, ay, cx, cy, dx, dy) <= 0){
  87.             sortc(bx, by, cx, cy);
  88.             if (bx == cx && by == cy)
  89.                 printf("%.10f %.10f\n", bx, by);
  90.             else
  91.                 printf("%.10f %.10f\n%.10f %.10f\n", bx, by, cx, cy);
  92.         }else{
  93.             sortc(bx, by, dx, dy);
  94.             if (bx == dx && by == dy)
  95.                 printf("%.10f %.10f\n", bx, by);
  96.             else
  97.                 printf("%.10f %.10f\n%.10f %.10f\n", bx, by, dx, dy);
  98.         }
  99.     }else
  100.         printf("Empty\n");
  101. }
  102.  
  103. void sortc(double &ax, double &ay, double &bx, double &by){
  104.     if (ax > bx){
  105.         swap(ax, bx);
  106.         swap(ay, by);
  107.     }else if (ax == bx){
  108.         if (ay > by){
  109.             swap(ax, bx);
  110.             swap(ay, by);
  111.         }
  112.     }
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement