33 #define MAX_COINCIDENT 8    40         if(contacts.
size()==1)
    53         for (i = 0;i<contacts.
size() ;i++ )
    55                 keycontacts[i].m_key = contacts[i].calc_key_contact();
    56                 keycontacts[i].m_value = i;
    64         GUINT coincident_count=0;
    67         GUINT last_key = keycontacts[0].m_key;
    70         push_back(contacts[keycontacts[0].m_value]);
    75         for( i=1;i<keycontacts.size();i++)
    77             key = keycontacts[i].m_key;
    78                 const GIM_CONTACT * scontact = &contacts[keycontacts[i].m_value];
    85                                 *pcontact = *scontact;
    88                         else if(normal_contact_average)
    94                         coincident_normals[coincident_count] = scontact->
m_normal;
   103                     if(normal_contact_average && coincident_count>0)
   106                         coincident_count = 0;
   120         if(contacts.
size()==1)
   130                 average_contact.
m_point += contacts[i].m_point;
   131                 average_contact.
m_normal += contacts[i].m_normal * contacts[i].m_depth;
   137         average_contact.
m_point *= divide_average;
   139         average_contact.
m_normal *= divide_average;
 
void resize(GUINT size, bool call_constructor=true, const T &fillData=T())
void gim_heap_sort(T *pArr, GUINT element_count, COMP_CLASS CompareFunc)
Very simple array container with fast access and simd memory. 
btVector3 can be used to represent 3D points and vectors. 
Prototype for comparators. 
void push_back(const GIM_CONTACT &obj)
btScalar length() const
Return the length of the vector. 
btScalar btFabs(btScalar x)