#include#include#include#include
using namespacestd;const double eps=1e-8;const double inf=1e20;intT,flag;int sgn(doublex){if(abs(x)
}structPoint{doublex,y;
Point(){}
Point(double xx,doubleyy):x(xx),y(yy){}
Pointoperator + (const Point& b)const{return Point(x+b.x,y+b.y);
}
Pointoperator - (const Point& b)const{return Point(x-b.x,y-b.y);
}double operator * (const Point& b)const{return x*b.x+y*b.y;
}double operator ^ (const Point& b)const{return x*b.y-b.x*y;
}//绕原点旋转角度b(弧度值),后x、y的变化
void transXY(doubleb){double tx=x,ty=y;
x=tx*cos(b)-ty*sin(b);
y=tx*sin(b)+ty*cos(b);
}
};structLine{
Point s,e;
Line(){}
Line(Point ss,Point ee){
s=ss,e=ee;
}//两直线相交求交点//第一个值为0表示直线重合,为1表示平行,为2表