#include<bits/stdc++.h> #include <cmath> #include <iomanip> #include <ios> 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; }; point findMeetingPoint(line line_A,line line_B){ // TODO:求直线 line_A 与 line_B 的交点 point a(-1.0,-1.0); double fm1=line_A.point_A.x-line_A.point_B.x; double fm2=line_B.point_A.x-line_B.point_B.x; if(fm1==0&&fm2==0){ return a; } else if(fm1==0&&fm2!=0){ double k2=(line_B.point_A.y-line_B.point_B.y)/fm2; double x=line_A.point_A.x; double y=k2*(line_A.point_A.x-line_B.point_A.x)+line_B.point_A.y; point a(x,y); return a; } else if(fm1!=0&&fm2==0){ double k1=(line_A.point_A.y-line_A.point_B.y)/fm1; double x=line_B.point_A.x; double y=k1*(line_B.point_A.x-line_A.point_A.x)-line_A.point_A.y; point a(x,y); return a; }else{ double k1=(line_A.point_A.y-line_A.point_B.y)/fm1; double k2=(line_B.point_A.y-line_B.point_B.y)/fm2; if(k1==0&&k2==0){ return a; } double x=(line_A.point_A.y-line_B.point_A.y+k2*line_B.point_A.x-k1*line_A.point_A.x)/(k2-k1); double y=(k1*k2*(line_B.point_A.x-line_A.point_A.x)+k2*line_A.point_A.y-k1*line_B.point_A.y)/(k2-k1); point a(x,y); return a; } } 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<<" "<<fixed<<setprecision(10)<<ans.y; return 0; }