Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <cstdio>
- using namespace std;
- double getS(double ax, double ay, double bx, double by);
- double getScal(double x, double y, double ax, double ay, double bx, double by);
- void print(double ax, double ay, double bx, double by, double cx, double cy, double dx, double dy);
- void sortc(double &ax, double &ay, double &bx, double &by);
- int main(){
- double ax, bx, ay, by, cx, dx, cy, dy, a1, a2, b1, b2, c1, c2, x, y;
- cin >> ax >> ay >> bx >> by >> cx >> cy >> dx >> dy;
- if (ax == bx && ay == by && cx == dx && cy == dy)
- if (ax == cx && ay == cy)
- printf("%.10f %.10f\n", ax, ay);
- else
- printf("Empty\n");
- else if (getS(bx - ax, by - ay, dx - cx, dy - cy) == 0)
- if (getS(bx - ax, by - ay, cx - ax, cy - ay) == 0 && getS(dx - cx, dy - cy, ax - cx, ay - cy) == 0)
- print(ax, ay, bx, by, cx, cy, dx, dy);
- else
- printf("Empty\n");
- else{
- a1 = by - ay;
- b1 = ax - bx;
- c1 = ay * (bx - ax) - ax * (by - ay);
- a2 = dy - cy;
- b2 = cx - dx;
- c2 = cy * (dx - cx) - cx * (dy - cy);
- if (a1 == 0){
- y = (a1 * c2 / a2 - c1) / (b1 - a1 * b2 / a2);
- x = -(c2 + b2 * y) / a2;
- }else{
- y = (a2 * c1 / a1 - c2) / (b2 - a2 * b1 / a1);
- x = -(c1 + b1 * y) / a1;
- }
- 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 &&
- getScal(x, y, dx, dy, cx, cy) >= 0)
- printf("%.10f %.10f\n", x, y);
- else
- printf("Empty\n");
- }
- return 0;
- }
- double getS(double ax, double ay, double bx, double by){
- return (bx * ay - ax * by);
- }
- double getScal(double x, double y, double ax, double ay, double bx, double by){
- return (x - ax) * (bx - ax) + (y - ay) * (by - ay);
- }
- void print(double ax, double ay, double bx, double by, double cx, double cy, double dx, double dy){
- if (ax == bx && ay == by)
- if (getScal(ax, ay, cx, cy, dx, dy) >= 0 && getScal(ax, ay, dx, dy, cx, cy) >= 0)
- printf("%.10f %.10f\n", ax, ay);
- else
- printf("Empty\n");
- else if (cx == dx && cy == dy)
- if (getScal(cx, cy, ax, ay, bx, by) >= 0 && getScal(cx, cy, bx, by, ax, ay) >= 0)
- printf("%.10f %.10f\n", cx, cy);
- else
- printf("Empty\n");
- else if (getScal(ax, ay, cx, cy, dx, dy) >= 0 && getScal(ax, ay, dx, dy, cx, cy) >= 0){
- if (getScal(bx, by, cx, cy, dx, dy) <= 0){
- sortc(ax, ay, cx, cy);
- if (ax == cx && ay == cy)
- printf("%.10f %.10f\n", ax, ay);
- else
- printf("%.10f %.10f\n%.10f %.10f\n", ax, ay, cx, cy);
- }else{
- sortc(ax, ay, dx, dy);
- if (ax == dx && ay == dy)
- printf("%.10f %.10f\n", ax, ay);
- else
- printf("%.10f %.10f\n%.10f %.10f\n", ax, ay, dx, dy);
- }
- }else if (getScal(bx, by, cx, cy, dx, dy) >= 0 && getScal(bx, by, dx, dy, cx, cy) >= 0){
- if (getScal(ax, ay, cx, cy, dx, dy) <= 0){
- sortc(bx, by, cx, cy);
- if (bx == cx && by == cy)
- printf("%.10f %.10f\n", bx, by);
- else
- printf("%.10f %.10f\n%.10f %.10f\n", bx, by, cx, cy);
- }else{
- sortc(bx, by, dx, dy);
- if (bx == dx && by == dy)
- printf("%.10f %.10f\n", bx, by);
- else
- printf("%.10f %.10f\n%.10f %.10f\n", bx, by, dx, dy);
- }
- }else
- printf("Empty\n");
- }
- void sortc(double &ax, double &ay, double &bx, double &by){
- if (ax > bx){
- swap(ax, bx);
- swap(ay, by);
- }else if (ax == bx){
- if (ay > by){
- swap(ax, bx);
- swap(ay, by);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement