main/src/georegression/fitting/curves/FitConicAtA_F64.java
@Override
	public boolean process(List<Point2D_F64> points , ConicGeneral_F64 output ) {
		final int N = points.size();
		if( N < 3 )
			throw new IllegalArgumentException("At least 3 points required");

		CommonOps_DDF6.fill(ATA,0);

		for (int i = 0; i < N; i++) {
			Point2D_F64 p = points.get(i);

			double x = p.x;
			double y = p.y;
			double xx = x*x;
			double xxx = xx*x;
			double yy = y*y;
			double yyy = yy*y;

			ATA.a11 += xx*xx;
			ATA.a12 += xxx*y;
			ATA.a13 += xx*yy;
			ATA.a14 += xxx;
			ATA.a15 += xx*y;
			ATA.a16 += xx;

			ATA.a22 += xx*yy;
			ATA.a23 += x*yyy;
//			ATA.a24 += xx*y;
			ATA.a25 += x*yy;
			ATA.a26 += x*y;

			ATA.a33 += yyy*y;
//			ATA.a34 += x*yy;
			ATA.a35 += yyy;
			ATA.a36 += yy;

//			ATA.a44 += xx;
			ATA.a45 += x*y;
			ATA.a46 += x;

//			ATA.a55 += yy;
			ATA.a56 += y;

		}
		ATA.a21 = ATA.a12;
		ATA.a24 = ATA.a15;

		ATA.a31 = ATA.a13;
		ATA.a32 = ATA.a23;
		ATA.a34 = ATA.a25;

		ATA.a41 = ATA.a14;
		ATA.a42 = ATA.a24;
		ATA.a43 = ATA.a34;
		ATA.a44 = ATA.a16;

		ATA.a51 = ATA.a15;
		ATA.a52 = ATA.a25;
		ATA.a53 = ATA.a35;
		ATA.a54 = ATA.a45;
		ATA.a55 = ATA.a36;

		ATA.a61 = ATA.a16;
		ATA.a62 = ATA.a26;
		ATA.a63 = ATA.a36;
		ATA.a64 = ATA.a56;
		ATA.a65 = ATA.a56;
		ATA.a66 = N;

		ConvertDMatrixStruct.convert(ATA,tmp);

		if( !solver.process(tmp,1,nullspace) )
			return false;

		output.A = nullspace.data[0];
		output.B = nullspace.data[1];
		output.C = nullspace.data[2];
		output.D = nullspace.data[3];
		output.E = nullspace.data[4];
		output.F = nullspace.data[5];

		return true;
	}
@Override
	public boolean process(List<Point2D_F64> points , ConicGeneral_F64 output ) {
		final int N = points.size();
		if( N < 3 )
			throw new IllegalArgumentException("At least 3 points required");

		CommonOps_DDF6.fill(ATA,0);

		for (int i = 0; i < N; i++) {
			Point2D_F64 p = points.get(i);

			double x = p.x;
			double y = p.y;
			double xx = x*x;
			double xxx = xx*x;
			double yy = y*y;
			double yyy = yy*y;

			ATA.a11 += xx*xx;
			ATA.a12 += xxx*y;
			ATA.a13 += xx*yy;
			ATA.a14 += xxx;
			ATA.a15 += xx*y;
			ATA.a16 += xx;

			ATA.a22 += xx*yy;
			ATA.a23 += x*yyy;
//			ATA.a24 += xx*y;
			ATA.a25 += x*yy;
			ATA.a26 += x*y;

			ATA.a33 += yyy*y;
//			ATA.a34 += x*yy;
			ATA.a35 += yyy;
			ATA.a36 += yy;

//			ATA.a44 += xx;
			ATA.a45 += x*y;
			ATA.a46 += x;

//			ATA.a55 += yy;
			ATA.a56 += y;

		}
		ATA.a21 = ATA.a12;
		ATA.a24 = ATA.a15;

		ATA.a31 = ATA.a13;
		ATA.a32 = ATA.a23;
		ATA.a34 = ATA.a25;

		ATA.a41 = ATA.a14;
		ATA.a42 = ATA.a24;
		ATA.a43 = ATA.a34;
		ATA.a44 = ATA.a16;

		ATA.a51 = ATA.a15;
		ATA.a52 = ATA.a25;
		ATA.a53 = ATA.a35;
		ATA.a54 = ATA.a45;
		ATA.a55 = ATA.a36;

		ATA.a61 = ATA.a16;
		ATA.a62 = ATA.a26;
		ATA.a63 = ATA.a36;
		ATA.a64 = ATA.a56;
		ATA.a65 = ATA.a56;
		ATA.a66 = N;

		ConvertDMatrixStruct.convert(ATA,tmp);

		if( !solver.process(tmp,1,nullspace) )
			return false;

		output.A = nullspace.data[0];
		output.B = nullspace.data[1];
		output.C = nullspace.data[2];
		output.D = nullspace.data[3];
		output.E = nullspace.data[4];
		output.F = nullspace.data[5];

		return true;
	}
@ Override public boolean process ( List < Point2D_F64 > points , ConicGeneral_F64 output ) { final int N = points . size ( ) ; if ( N < 3 ) throw new IllegalArgumentException ( "At least 3 points required" ) ; CommonOps_DDF6 . fill ( ATA , 0 ) ; for ( int i = 0 ; i < N ; i ++ ) { Point2D_F64 p = points . get ( i ) ; double x = p . x ; double y = p . y ; double xx = x * x ; double xxx = xx * x ; double yy = y * y ; double yyy = yy * y ; ATA . a11 += xx * xx ; ATA . a12 += xxx * y ; ATA . a13 += xx * yy ; ATA . a14 += xxx ; ATA . a15 += xx * y ; ATA . a16 += xx ; ATA . a22 += xx * yy ; ATA . a23 += x * yyy ; //			ATA.a24 += xx*y; ATA . a25 += x * yy ; ATA . a26 += x * y ; ATA . a33 += yyy * y ; //			ATA.a34 += x*yy; ATA . a35 += yyy ; ATA . a36 += yy ; //			ATA.a44 += xx; ATA . a45 += x * y ; ATA . a46 += x ; //			ATA.a55 += yy; ATA . a56 += y ; } ATA . a21 = ATA . a12 ; ATA . a24 = ATA . a15 ; ATA . a31 = ATA . a13 ; ATA . a32 = ATA . a23 ; ATA . a34 = ATA . a25 ; ATA . a41 = ATA . a14 ; ATA . a42 = ATA . a24 ; ATA . a43 = ATA . a34 ; ATA . a44 = ATA . a16 ; ATA . a51 = ATA . a15 ; ATA . a52 = ATA . a25 ; ATA . a53 = ATA . a35 ; ATA . a54 = ATA . a45 ; ATA . a55 = ATA . a36 ; ATA . a61 = ATA . a16 ; ATA . a62 = ATA . a26 ; ATA . a63 = ATA . a36 ; ATA . a64 = ATA . a56 ; ATA . a65 = ATA . a56 ; ATA . a66 = N ; ConvertDMatrixStruct . convert ( ATA , tmp ) ; if ( ! solver . process ( tmp , 1 , nullspace ) ) return false ; output . A = nullspace . data [ 0 ] ; output . B = nullspace . data [ 1 ] ; output . C = nullspace . data [ 2 ] ; output . D = nullspace . data [ 3 ] ; output . E = nullspace . data [ 4 ] ; output . F = nullspace . data [ 5 ] ; return true ; }
Fits the conic to the points.  Strongly recommended that you transform the points such that they have
zero mean and a standard deviation along x and y axis, independently.

@param points (Input) points
@param output (Output) found conic
@return true if successful or false if it failed
Fits the conic to the points . Strongly recommended that you transform the points such that they have zero mean and a standard deviation along x and y axis independently .