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