public static DMatrixRMaj outerProd(GeoTuple3D_F64 a, GeoTuple3D_F64 b, DMatrixRMaj ret) {
    """
	Computes the outer product of two vectors:<br>
	O = a*b<sup>T</sup>
	
	@param a 3D vector
	@param b 3D vector
	@param ret 3 x 3 matrix or null.
	@return outer product of two 3d vectors
    """
		if( ret == null )
			ret = new DMatrixRMaj(3,3);

		ret.data[0] = a.x*b.x;
		ret.data[1] = a.x*b.y;
		ret.data[2] = a.x*b.z;
		ret.data[3] = a.y*b.x;
		ret.data[4] = a.y*b.y;
		ret.data[5] = a.y*b.z;
		ret.data[6] = a.z*b.x;
		ret.data[7] = a.z*b.y;
		ret.data[8] = a.z*b.z;

		return ret;
	}
public static DMatrixRMaj outerProd(GeoTuple3D_F64 a, GeoTuple3D_F64 b, DMatrixRMaj ret) {
		if( ret == null )
			ret = new DMatrixRMaj(3,3);

		ret.data[0] = a.x*b.x;
		ret.data[1] = a.x*b.y;
		ret.data[2] = a.x*b.z;
		ret.data[3] = a.y*b.x;
		ret.data[4] = a.y*b.y;
		ret.data[5] = a.y*b.z;
		ret.data[6] = a.z*b.x;
		ret.data[7] = a.z*b.y;
		ret.data[8] = a.z*b.z;

		return ret;
	}
public static DMatrixRMaj outerProd ( GeoTuple3D_F64 a , GeoTuple3D_F64 b , DMatrixRMaj ret ) { if ( ret == null ) ret = new DMatrixRMaj ( 3 , 3 ) ; ret . data [ 0 ] = a . x * b . x ; ret . data [ 1 ] = a . x * b . y ; ret . data [ 2 ] = a . x * b . z ; ret . data [ 3 ] = a . y * b . x ; ret . data [ 4 ] = a . y * b . y ; ret . data [ 5 ] = a . y * b . z ; ret . data [ 6 ] = a . z * b . x ; ret . data [ 7 ] = a . z * b . y ; ret . data [ 8 ] = a . z * b . z ; return ret ; }
Computes the outer product of two vectors:<br>
O = a*b<sup>T</sup>

@param a 3D vector
@param b 3D vector
@param ret 3 x 3 matrix or null.
@return outer product of two 3d vectors
Computes the outer product of two vectors : <br > O = a * b<sup > T< / sup >