struct Point { double x, y; /* 運算子重載: +,-,*,/,== */ };
typedef Point Vector;
const double eps = 1e-8, PI = acos(-1.0);
int dcmp(double x) { return fabs(x)
struct Circle { Point c; double r; Point point(double a) { return Point(c.x+cos(a)*r, c.y+sin(a)*r); } };
// 直線圓交點
int getLineCircleIntersection(Point p, Vector v, Circle c, vector& sol) { /* 解一元二次方程 */ }
// 兩圓交點
int getCircleCircleIntersection(Circle c1, Circle c2, vector& sol) { /* 余弦定理求夾角 */ }
// 點到圓切線
int getTangents(Point p, Circle c, Vector* v) { /* 向量旋轉 */ }
// 兩圓公切線(內/外)
int getCircleTangents(Circle A, Circle B, Point* a, Point* b) { /* 懸線法,分情況討論 */ }
// 三角形外切圓/內切圓
Circle CircumscribedCircle(Point p1, Point p2, Point p3);
Circle InscribedCircle(Point p1, Point p2, Point p3);
輸入多種操作指令(CircumscribedCircle, InscribedCircle, TangentLineThroughPoint, CircleThroughAPointAndTangentToALineWithRadius, CircleTangentToTwoLinesWithRadius, CircleTangentToTwoDisjointCirclesWithRadius),調用對應函數並格式化輸出坐標/角度。
dcmp 處理精度。