main/src/georegression/geometry/UtilCircle2D_F64.java
public static boolean circle(Point2D_F64 x0 , Point2D_F64 x1 , Point2D_F64 x2 , Circle2D_F64 circle ) {

		// points that lie on line a and b
		double xa = (x0.x+x1.x)/2.0;
		double ya = (x0.y+x1.y)/2.0;
		double xb = (x1.x+x2.x)/2.0;
		double yb = (x1.y+x2.y)/2.0;

		// slopes of lines a and b
		double m2 = x0.x-x1.x;
		double m1 = x1.y-x0.y;

		double n2 = x2.x-x1.x;
		double n1 = x1.y-x2.y;

		// find the intersection of the lines
		double bottom = m2*n1-n2*m1;
		if( bottom == 0 )
			return false;

		double alpha = (-m2*(xb-xa) + m1*(yb-ya))/bottom;

		circle.center.x = xb + n1*alpha;
		circle.center.y = yb + n2*alpha;
		circle.radius = circle.center.distance(x0);

		return true;
	}
public static boolean circle(Point2D_F64 x0 , Point2D_F64 x1 , Point2D_F64 x2 , Circle2D_F64 circle ) {

		// points that lie on line a and b
		double xa = (x0.x+x1.x)/2.0;
		double ya = (x0.y+x1.y)/2.0;
		double xb = (x1.x+x2.x)/2.0;
		double yb = (x1.y+x2.y)/2.0;

		// slopes of lines a and b
		double m2 = x0.x-x1.x;
		double m1 = x1.y-x0.y;

		double n2 = x2.x-x1.x;
		double n1 = x1.y-x2.y;

		// find the intersection of the lines
		double bottom = m2*n1-n2*m1;
		if( bottom == 0 )
			return false;

		double alpha = (-m2*(xb-xa) + m1*(yb-ya))/bottom;

		circle.center.x = xb + n1*alpha;
		circle.center.y = yb + n2*alpha;
		circle.radius = circle.center.distance(x0);

		return true;
	}
public static boolean circle ( Point2D_F64 x0 , Point2D_F64 x1 , Point2D_F64 x2 , Circle2D_F64 circle ) { // points that lie on line a and b double xa = ( x0 . x + x1 . x ) / 2.0 ; double ya = ( x0 . y + x1 . y ) / 2.0 ; double xb = ( x1 . x + x2 . x ) / 2.0 ; double yb = ( x1 . y + x2 . y ) / 2.0 ; // slopes of lines a and b double m2 = x0 . x - x1 . x ; double m1 = x1 . y - x0 . y ; double n2 = x2 . x - x1 . x ; double n1 = x1 . y - x2 . y ; // find the intersection of the lines double bottom = m2 * n1 - n2 * m1 ; if ( bottom == 0 ) return false ; double alpha = ( - m2 * ( xb - xa ) + m1 * ( yb - ya ) ) / bottom ; circle . center . x = xb + n1 * alpha ; circle . center . y = yb + n2 * alpha ; circle . radius = circle . center . distance ( x0 ) ; return true ; }
Given three points find the circle that intersects all three. If false is returned that means the points all
lie along a line and there is no circle.
@param x0 Point
@param x1 Point
@param x2 Point
@param circle (Output) found circle
@return true if a circle was found or false if not
Given three points find the circle that intersects all three . If false is returned that means the points all lie along a line and there is no circle .