## Algoritmo de CompetitiveProgramming3Circles.

Cualquier duda no dudes en contactar.

``````#include <cstdio>
#include <cmath>
using namespace std;

#define INF 1e9
#define EPS 1e-9
#define PI acos(-1.0)

double DEG_to_RAD(double d) { return d * PI / 180.0; }

double RAD_to_DEG(double r) { return r * 180.0 / PI; }

struct point_i { int x, y;     // whenever possible, work with point_i
point_i() { x = y = 0; }                      // default constructor
point_i(int _x, int _y) : x(_x), y(_y) {} };          // constructor

struct point { double x, y;   // only used if more precision is needed
point() { x = y = 0.0; }                      // default constructor
point(double _x, double _y) : x(_x), y(_y) {} };      // constructor

int insideCircle(point_i p, point_i c, int r) { // all integer version
int dx = p.x - c.x, dy = p.y - c.y;
int Euc = dx * dx + dy * dy, rSq = r * r;             // all integer
return Euc < rSq ? 0 : Euc == rSq ? 1 : 2; } //inside/border/outside

bool circle2PtsRad(point p1, point p2, double r, point &c) {
double d2 = (p1.x - p2.x) * (p1.x - p2.x) +
(p1.y - p2.y) * (p1.y - p2.y);
double det = r * r / d2 - 0.25;
if (det < 0.0) return false;
double h = sqrt(det);
c.x = (p1.x + p2.x) * 0.5 + (p1.y - p2.y) * h;
c.y = (p1.y + p2.y) * 0.5 + (p2.x - p1.x) * h;
return true; }         // to get the other center, reverse p1 and p2

int main() {
// circle equation, inside, border, outside
point_i pt(2, 2);
int r = 7;
point_i inside(8, 2);
printf("%d\n", insideCircle(inside, pt, r));             // 0-inside
point_i border(9, 2);
printf("%d\n", insideCircle(border, pt, r));          // 1-at border
point_i outside(10, 2);
printf("%d\n", insideCircle(outside, pt, r));           // 2-outside

double d = 2 * r;
printf("Diameter = %.2lf\n", d);
double c = PI * d;
printf("Circumference (Perimeter) = %.2lf\n", c);
double A = PI * r * r;
printf("Area of circle = %.2lf\n", A);

printf("Length of arc   (central angle = 60 degrees) = %.2lf\n", 60.0 / 360.0 * c);
printf("Length of chord (central angle = 60 degrees) = %.2lf\n", sqrt((2 * r * r) * (1 - cos(DEG_to_RAD(60.0)))));
printf("Area of sector  (central angle = 60 degrees) = %.2lf\n", 60.0 / 360.0 * A);

point p1;
point p2(0.0, -1.0);
point ans;