View Code of Problem 106

#include <iostream>
#include <math.h>
#define PI acos(-1)
using namespace std;

double x1, x2, r;
double y11, y2;
double dis;

int main() {
	while(cin >> x1 >> y11 >> x2 >> y2 >> r) {
		if(x1 == x2 && y11 == y2) {
			cout << "重合" << endl;
		}
		else {
			double dx = abs(x1 - x2);
			double dy = abs(y11 - y2);
			dis = sqrt(dx * dx + dy * dy);
			if(dis == 2 * r) cout << "相切" << endl;
			else if(dis < 2 * r) {
				double a = acos(dis / 2 / r);
				double s = 2 * (r * r * a - dis / 2 * r * sin(a)); // s扇形 - s三角形 = (1/2 * r^2 * cita - 1/2 * dis/2 * r * sina) * 4
				printf("相交 %.2lf\n", s);
			}
			else cout << "相离" << endl;
		}
	}
	return 0;
}

Double click to view unformatted code.


Back to problem 106