struct node{
double x,y;
};
node a,b,c;
//求两个点之间的长度
double len(node a,node b) {
double tmp = sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
return tmp;
}
//给出三个点,求三角形的面积 海伦公式: p=(a+b+c)/2,S=sqrt(p(p-a)(p-b)(p-c))
double Area(node a,node b,node c){
double lena = len(a,b);
double lenb = len(b,c);
double lenc = len(a,c);
double p = (lena + lenb + lenc) / 2.0;
double S = sqrt(p * (p - lena) * (p - lenb) * (p - lenc));
return S;
}
//三角形求每条边对应的圆心角
void Ran() {
double lena = len(a,b);
double lenb = len(b,c);
double lenc = len(a,c);
double A = acos((lenb * lenb + lenc * lenc - lena * lena) / (2 * lenb * lenc));
double B = acos((lena * lena + lenc * lenc - lenb * lenb) / (2 * lena * lenc));
double C = acos((lena * lena + lenb * lenb - lenc * lenc) / (2 * lena * lenb));
}
//求外接圆半径r = a * b * c / 4S
double R(node a,node b,node c) {
double lena = len(a,b);
double lenb = len(b,c);
double lenc = len(a,c);
double S = Area(a,b,c);
double R = lena * lenb * lenc / (4.0 * S);
}
const double eps = 1e-8, pi = acos(-1);
const int N = 1e5 + 10;
struct point {
double x, y;
point() {}
point(double _x, double _y) {
x = _x;
y = _y;
}
point operator-(const point &p) const {
return point(x - p.x, y - p.y);
}
point operator+(const point &p) const {
return point(x + p.x, y + p.y);
}
double operator*(const point &p) const {
return x * p.y - y * p.x;
}
double operator/(const point &p) const {
return x * p.x + y * p.y;
}
}a[N], b[N << 1];
struct line {
point p1, p2;
double ang;
line() {}
line(point p01, point p02) {
p1 = p01;
p2 = p02;
}
void getang() {
ang = atan2(p2.y - p1.y, p2.x - p1.x);
}
}c[N], q[N];
struct circle
{
double x, y, r;
}cc;
struct point3 {
double x, y, z;
point3() {}
point3(double _x, double _y, double _z) {
x = _x;
y = _y;
z = _z;
}
point3 operator-(const point3 &p) const {
return point3