Circular Area (PKU 2546)
http://poj.org/problem?id=2546
問題
2円の共通部分の面積を求めよ。
解法
ライブラリを使って終了。
ライブラリは続きを読むに置いてみた。
double CircleCircleArea(double r1, double r2, double d) { if (r1 + r2 - d < EPS) { return 0; } if (r1 < r2) { swap(r1, r2); } if (r1 - r2 - d > -EPS || r2 < EPS) { return r2 * r2 * PI; } double t1 = acos((d * d + r1 * r1 - r2 * r2) / (2 * d * r1)); double t2 = acos((d * d + r2 * r2 - r1 * r1) / (2 * d * r2)); double sq = (r1 * r1 * sin(t1 * 2) + r2 * r2 * sin(t2 * 2)) / 2.0; double s = r1 * r1 * t1 + r2 * r2 * t2 - sq; assert(s >= -EPS); assert(!isnan(s)); return s; }