题意:一个圆上按顺序分布点a,b,c,d,给出ac,ad,bc,bd的值,求cd距离。
解法:利用余弦定理,圆上的四边形对角cos值相等,cos< ADC >=(ad^2+cd^2-ac^2)/(2*ad*cd) , cos < BCD > = (bc^2+cd^2-bd^2)/(2*bc*cd) , 解出cd
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <math.h>
using namespace std;
double ad, ac, bd, bc;
int main() {
cin >> ad >> ac >> bd >> bc;
if (ad*ac == bc*bd) {
cout << "Impossible." << endl;
return 0;
}
double ans = ((ad*ad+ac*ac)*2*bc*bd-(bc*bc+bd*bd)*2*ac*ad)/(2*bc*bd-2*ac*ad);
if (ans < 0) {
cout << "Impossible." << endl;
return 0;
}
ans = sqrt(ans);
printf("Distance is %.0lf km.\n", ans*1000);
}