//package delaune;



class Circle {
    Point2D c;
    float r;

    Circle() {
      c = new Point2D();
      r = 0.0f;
    }
    Circle(Point2D c, float r) {
      this.c = c; this.r = r;
    }

    public void set(Point2D c, float r) {
      this.c = c; this.r = r;
    }

    public boolean inside(Point2D p) {
        if (c.distance(p) < r )
            return true;
        else
            return false;
    }


     //sudaromas apskritimas per tris taskus

    public void circumCircle(Point2D p1, Point2D p2, Point2D p3) {
        float onWichSide1;

         onWichSide1 = onWhichSide(p1, p2, p3);
        if ( onWichSide1 != 0.0)
            {
                float p1Sq, p2Sq, p3Sq;
                float num, den;
                float cx, cy;

                p1Sq = p1.x * p1.x + p1.y * p1.y;
                p2Sq = p2.x * p2.x + p2.y * p2.y;
                p3Sq = p3.x * p3.x + p3.y * p3.y;
                num = p1Sq*(p2.y - p3.y) + p2Sq*(p3.y - p1.y) + p3Sq*(p1.y - p2.y);
                cx = num / (2.0f *  onWichSide1);
                num = p1Sq*(p3.x - p2.x) + p2Sq*(p1.x - p3.x) + p3Sq*(p2.x - p1.x);
                cy = num / (2.0f *  onWichSide1);

                c.x=(int)cx;
                c.y=(int)cy;
            }
        r = c.distance(p1);
    }

    static float onWhichSide(Point2D p1, Point2D p2, Point2D p3) {
       float u1, v1, u2, v2;
       u1 =  p2.x - p1.x;
       v1 =  p2.y - p1.y;
       u2 =  p3.x - p1.x;
       v2 =  p3.y - p1.y;
       return u1 * v2 - v1 * u2;
   }
}
