View Code of Problem 106

#include <bits/stdc++.h>
using namespace std;
int main() {
	double x1, y1, x2, y2, r;
	while (cin >> x1 >> y1 >> x2 >> y2 >> r) {
		if (x1 == x2 && y1 == y2)
			printf("重合\n");
		else {
			double d = sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));
			if (d == r*2)
				printf("相切\n");
			else if (d > r * 2)
				printf("相离\n");
			else {
				printf("相交 ");
				double c, s;
				c = acos(d / 2.0 / r);        // acos()返回的是弧度
				s = c * r*r - r * d*sin(c) / 2.0;  // 三角形面积=1/2absinc;扇形面积是1/2*弧度*r^2
				printf("%.2lf\n", s * 2);  // 面积是(两个扇形面积再减去一个三角形面积) * 2
			}
		}
	}
	return 0;
}

Double click to view unformatted code.


Back to problem 106