2019南京icpc K - Triangle
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const double eps=1e-7;
const int M=50,mod=1e9+7;
int n;
double px,py;
int main() {
cin>>n;
double x1,y1,x2,yy,x3,y3,x,y;
while(n--) {
scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&yy,&x3,&y3,&px,&py);
if(px==x1&&py==y1) {
x=(x2+x3)/2;
y=(yy+y3)/2;
} else if(px==x2&&py==yy) {
x=(x1+x3)/2;
y=(y1+y3)/2;
} else if(px==x3&&py==y3) {
x=(x2+x1)/2;
y=(yy+y1)/2;
} else {
if((x1-x2)*(y1-py)==(y1-yy)*(x1-px)&&((x1-px<=x1-x2&&x1>=px&&x1>=x2)||(x1-px>=x1-x2&&x1<=px&&x1<=x2))) {
if(fabs(x1-x2)<2*fabs(x1-px)||fabs(y1-yy)<2*fabs(y1-py)) {
double t;
if(x1==px&&y1!=py)
t=(y1-yy)/(2*(y1-py));
else
t=(x1-x2)/(2*(x1-px));
x=x1-t*x1+t*x3;
y=y1-t*y1+t*y3;
} else {
double t;
if(x2==px)
t=(yy-y1)/(2*(yy-py));
else
t=(x2-x1)/(2*(x2-px));
x=x2-t*x2+t*x3;
y=yy-t*yy+t*y3;
}
} else if((x1-x3)*(y1-py)==(y1-y3)*(x1-px)&&((x1-px<=x1-x3&&x1>=px&&x1>=x3)||(x1-px>=x1-x3&&x1<=px&&x1<=x3))) {
if(fabs(x1-x3)<2*fabs(x1-px)||fabs(y1-y3)<2*fabs(y1-py)) {
double t;
if(x1==px)
t=(y1-y3)/(2*(y1-py));
else
t=(x1-x3)/(2*(x1-px));
x=x1-t*x1+t*x2;
y=y1-t*y1+t*yy;
} else {
double t;
if(x3==px)
t=(y3-y1)/(2*(y3-py));
else
t=(x3-x1)/(2*(x3-px));
x=x3-t*x3+t*x2;
y=y3-t*y3+t*yy;
}
} else if((x3-x2)*(y3-py)==(y3-yy)*(x3-px)&&((x3-px<=x3-x2&&x3>=px&&x3>=x2)||(x3-px>=x3-x2&&x3<=px&&x3<=x2))) {
if(fabs(x3-x2)<2*fabs(x3-px)||fabs(y3-yy)<2*fabs(y3-py)) {
double t;
if(x3==px)
t=(y3-yy)/(2*(y3-py));
else
t=(x3-x2)/(2*(x3-px));
x=x3-t*x3+t*x1;
y=y3-t*y3+t*y1;
} else {
double t;
if(x2==px)
t=(yy-y3)/(2*(yy-py));
else
t=(x2-x3)/(2*(x2-px));
x=x2-t*x2+t*x1;
y=yy-t*yy+t*y1;
}
} else {
printf("-1\n");
continue;
}
}
printf("%.15lf %.15lf\n",x,y);
}
return 0;
}