The Trials
and Tribulations of Tribology
Listing
2. Code for handling static friction forces.
// Calculating Magnitude
of Fn
FdotN = DotProduct(&curParticle->contactN,&curParticle->f);
// Calculating Vt
Velocity Tangent to Contact Normal
VdotN = DotProduct(&curParticle->contactN,&curParticle->v);
ScaleVector(&curParticle->contactN, VdotN, &Vn);
VectorDifference(&curParticle->v, &Vn, &Vt);
Vmag = VectorSquaredLength(&Vt);
NormalizeVector(&Vt); // Get the Direction of Vt
if (Vmag > STATIC_THRESHOLD) // Handle Static Friction
{
ScaleVector(&Vt, (FdotN * m_Ckf), &Vt);
// Multiply By Normal force magnitude and Coef of Kinetic
Friction
VectorSum(&curParticle->f,&Vt,&curParticle->f);
}
else // Handle it as Kinetic Friction
{
Vmag = Vmag / STATIC_THRESHOLD;
// Multiply By Normal force magnitude and Coef of Static // Friction
// And Static approximation ratio
ScaleVector(&Vt, (FdotN * m_Csf * Vmag),
&Vt);
VectorSum(&curParticle->f,&Vt,&curParticle->f);
}
________________________________________________________
Back
to Article