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;
	}
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