const int N = 1e5 + 50;
const ld PI = acos(-1.0);
const ld eps=1e-8;
int sgn(ld x) {
if(fabs(x)<eps)return 0;
return x<0?-1:1;
}
struct Point {
ld x,y;
Point() {}
Point(ld x,ld y):x(x),y(y) {}
Point operator +(Point B) {
return Point(x+B.x,y+B.y);
}
Point operator -(Point B) {
return Point(x-B.x,y-B.y);
}
Point operator *(double k) {
return Point(x*k,y*k);
}
Point operator /(double k) {
return Point(x/k,y/k);
}
bool operator ==(Point B) {
return sgn(x-B.x)==0&&sgn(y-B.y)==0;
}
};
struct Line {
Point p1,p2;
Line() {}
Line(Point p1,Point p2):p1(p1),p2(p2) {}
};
typedef Point Vector;
/*************三角形的四心***********/
//外心,中垂线交点
Point triangle_waixin(Point a,Point b,Point c) {
Point s;
ld a1=2*(b.x-a.x),b1=2*(b.y-a.y),a2=2*(c.x-a.x),b2=2*(c.y-a.y);
ld c1=b.x*b.x-a.x*a.x+b.y*b.y-a.y*a.y;
ld c2=c.x*c.x-a.x*a.x+c.y*c.y-a.y*a.y;
s.x=(b1*c2-b2*c1)/(a2*b1-a1*b2);
s.y=(a2*c1-a1*c2)/(a2*b1-a1*b2);
return s;
}
//内心,角平分线交点
ld Dis(Point a,Point b) {
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
Point triangle_neixin(Point a,Point b,Point c) {
ld A = Dis(b,c),B=Dis(a,c),C=Dis(a,b),S = A+B+C;
ld x = (A*a.x+B*b.x+C*c.x)/S;
ld y = (A*a.y+B*b.y+C*c.y)/S;
return Point(x,y);
}
//重心
Point triangle_zhongxin(Point a,Point b,Point c) {
return Point((a.x+b.x+c.x)/3.0,(a.y+b.y+c.y)/3.0);
}
//垂心
Point triangle_chuixinchuixin(Point a,Point b,Point c) {
return triangle_zhongxin(a,b,c)*3.0-triangle_waixin(a,b,c)*2.0;
}
/*******************************************************/
//海伦公式求面积
ld triangle_hailun(Point a,Point b,Point c) {
ld A = Dis(b,c),B=Dis(a,c),C=Dis(a,b),p=(A+B+C)/2.0;
return sqrt(p*(p-A)*(p-B)*(p-C));
}
原文:https://www.cnblogs.com/LaiYiC/p/14868443.html