解析几何
在解析几何中,二分法是常用的。
题意:给出x,y,c求?长度。
分析:设两直角边为xx,yy。两对顶三角形相似 => yy/c=xx/(xx-c) => c = xx*yy/(xx+yy)
然后二分查找所求长度即可。可以通过所求长度和x,y,计算出c,若c比真实的大则证明当前的查找值偏小。
View Code
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cstdio>
usingnamespace std;
#define eps 1.0E-8
double x, y, c, xx, yy;
bool ok(double a)
{
xx = sqrt(x * x - a * a);
yy = sqrt(y * y - a * a);
double cc = xx * yy / (xx + yy);
return cc > c - eps;
}
int main()
{
//freopen("t.txt", "r", stdin);
while (scanf("%lf%lf%lf", &x, &y, &c) != EOF)
{
double l = eps;
double r = x;
while (l + eps < r)
{
double mid = (l + r) /2;
if (ok(mid))
l = mid;
else
r = mid;
}
printf("%.3f\n", l);
}
return0;
}