main/src/georegression/geometry/GeometryMath_F64.java
public static double innerProd( GeoTuple2D_F64 a, DMatrixRMaj M, GeoTuple2D_F64 b ) {
		if( M.numRows != 3 || M.numCols != 3 )
			throw new IllegalArgumentException( "M must be 3 by 3." );

		DMatrixRMaj m1 = new DMatrixRMaj( 3, 1, true, a.x, a.y, 1 );
		DMatrixRMaj m2 = new DMatrixRMaj( 3, 1, true, b.x, b.y, 1 );

		return (double) ( VectorVectorMult_DDRM.innerProdA( m1, M, m2 ) );
	}
public static double innerProd( GeoTuple2D_F64 a, DMatrixRMaj M, GeoTuple2D_F64 b ) {
		if( M.numRows != 3 || M.numCols != 3 )
			throw new IllegalArgumentException( "M must be 3 by 3." );

		DMatrixRMaj m1 = new DMatrixRMaj( 3, 1, true, a.x, a.y, 1 );
		DMatrixRMaj m2 = new DMatrixRMaj( 3, 1, true, b.x, b.y, 1 );

		return (double) ( VectorVectorMult_DDRM.innerProdA( m1, M, m2 ) );
	}
<p>
Computes the inner matrix product: ret = a'*M*b<br>
where ret is a scalar number. 'a' and 'b' are automatically converted into homogeneous
coordinates.
</p>

@param a 2D point.
@param M 3 by 3 matrix.
@param b 2D point.
@return scalar number,