Beispiel #1
0
bool MxQuadric::optimize(MxVector& v) const
{
    MxMatrix Ainv(A.dim());

    double det = A.invert(Ainv);
    if( FEQ(det, 0.0, 1e-12) )
	return false;

    v = (Ainv * b);
    mxv_neg(v, v.dim());

    return true;
}
Beispiel #2
0
void adjoint44(Mat4 *out, const Mat4 *in)
{
    Mat4 A;
	Vec4 tempv;

	copy44( &A, in );
	mxv_neg( tempv.elt, A.row[0].elt, 4 );

    cross4( &(out->row[0]), &(A.row[1]), &(A.row[2]), &(A.row[3]));
    cross4( &(out->row[1]), &(tempv),    &(A.row[2]), &(A.row[3]));
    cross4( &(out->row[2]), &(A.row[0]), &(A.row[1]), &(A.row[3]));
    cross4( &(out->row[3]), &(tempv),    &(A.row[1]), &(A.row[2]));
}
Beispiel #3
0
MxBool optimizev( const MxQuadric3 *q, Vec3 *v)
{
    Mat3 Ainv, tensor;
	double det;
	Vec3 vtemp;

	quad_tensor( q, &tensor );
    det = invert33( &Ainv, &tensor );
    if( MxFEQ(det, 0.0, 1e-12f) )
		return 0;

	quad_vector( &vtemp, q );
	vecmul33( v, &Ainv, &vtemp );
	mxv_neg( v->elt, v->elt, 3 );


    /* MX_ASSERT( quad_evaluatev( q, v->elt ) >= 0 ); */
    return 1;
}