final Vector3 t2J2 = r1.cross(t2);
final Vector3 t2J3 = t2.negate();
final Vector3 t2J4 = r2.cross(t2).negate();
final Vector3 t2B1 = b1.isFixed()? new Vector3(): M1.multiply(t2J1);
final Vector3 t2B2 = b1.isFixed()? new Vector3(): I1.multiply(t2J2);
final Vector3 t2B3 = b2.isFixed()? new Vector3(): M2.multiply(t2J3);
final Vector3 t2B4 = b2.isFixed()? new Vector3(): I2.multiply(t2J4);
//then the tangential friction constraints
double ut1i = t2J1.dot(b1.state.velocity) + t2J2.dot(b1.state.omega) + t2J3.dot(b2.state.velocity) + t2J4.dot(b2.state.omega); //relativeVelocity(b1,b2,p,t2);
double ut1f = 0;