This documentation is automatically generated by online-judge-tools/verification-helper
This project is maintained by tsutaj
/***** 円に関する問題 *****/
// 直線 a1, a2 と 円 C との距離
double dist_lc(Point a1, Point a2, Circle c) {
return max(dist_lp(a1, a2, c.first) - c.second, 0.0);
}
// 線分 a1, a2 と 円 C との距離
double dist_sc(Point a1, Point a2, Circle c) {
double dSqr1 = norm(c.first - a1), dSqr2 = norm(c.first - a2);
double r = c.second;
if(dSqr1 < r*r ^ dSqr2 < r*r) return 0; //円が線分を包含するとき距離0ならばここをORに変える
if(dSqr1 < r*r & dSqr2 < r*r) return r - sqrt(max(dSqr1, dSqr2));
return max(dist_sp(a1, a2, c.first) - r, 0.0);
}
// 円 x と円 y との距離
double dist_cc(Circle x, Circle y) {
Point a = x.first, b = y.first;
double ar = x.second, br = y.second;
double d = abs(a-b);
return GE(d, abs(ar-br)) ? max(d-ar-br, 0.0) : abs(ar-br) - d;
}
#line 1 "geometry/old/gmtr_004_circle_dist.cpp"
/***** 円に関する問題 *****/
// 直線 a1, a2 と 円 C との距離
double dist_lc(Point a1, Point a2, Circle c) {
return max(dist_lp(a1, a2, c.first) - c.second, 0.0);
}
// 線分 a1, a2 と 円 C との距離
double dist_sc(Point a1, Point a2, Circle c) {
double dSqr1 = norm(c.first - a1), dSqr2 = norm(c.first - a2);
double r = c.second;
if(dSqr1 < r*r ^ dSqr2 < r*r) return 0; //円が線分を包含するとき距離0ならばここをORに変える
if(dSqr1 < r*r & dSqr2 < r*r) return r - sqrt(max(dSqr1, dSqr2));
return max(dist_sp(a1, a2, c.first) - r, 0.0);
}
// 円 x と円 y との距離
double dist_cc(Circle x, Circle y) {
Point a = x.first, b = y.first;
double ar = x.second, br = y.second;
double d = abs(a-b);
return GE(d, abs(ar-br)) ? max(d-ar-br, 0.0) : abs(ar-br) - d;
}