#include<bits/stdc++.h> using namespace std; struct point{ double x,y; point(double A,double B){ x=A,y=B; } point() = default; }; struct line{ point point_A,point_B; line(point A,point B){ point_A = A,point_B = B; } line() = default; }; double grad(line x){ return (x.point_A.y-x.point_B.y)/(x.point_A.x-x.point_B.x); } double yint(line x){ return x.point_A.y-grad(x)*x.point_A.x; } point findMeetingPoint(line line_A,line line_B){ point meet; if(grad(line_A)==grad(line_B)){ meet.x=-1;meet.y=-1; return meet; } // TODO:求直线 line_A 与 line_B 的交点 double k1=grad(line_A),k2=grad(line_B),b1=yint(line_A),b2=yint(line_B); if(line_A.point_A.x==line_A.point_B.x){ meet.x=line_A.point_A.x; meet.y=k2*line_A.point_A.x+b2; return meet; } if(line_B.point_A.x==line_B.point_B.x){ meet.x=line_B.point_B.x; meet.y=k1*line_B.point_A.x+b1; return meet; } double xMeet = (b2-b1)/(k1-k2); double yMeet = k1*xMeet+b1; meet.x=xMeet;meet.y=yMeet; return meet; } int main(){ point A,B,C,D; cin>>A.x>>A.y>>B.x>>B.y>>C.x>>C.y>>D.x>>D.y; line AB=line(A,B); line CD=line(C,D); point ans = findMeetingPoint(AB,CD); cout<<fixed<<setprecision(10)<<ans.x<<" "<<ans.y; return 0; }