Bounce with 2 contacts point doesn’t work without some trick

Sorry in advance for my bad level in english :/

I have the same issue as the one on this topic :

2D physics engine: Impulse based collision response with contact point manifold

I must separate linear and angular impulse resolution, else I don’t have bounce with 2 contacts point. I don’t understand why because I am using the same way like Matter.js

public void SolveVelocity(Pair _pair)         {             if (!_pair.tk_isActive)                 return;                         Vector3 rpA_;             Vector3 rpB_;             //Normal Impulse             float linearImpulse_X;             float linearImpulse_Y;             float angularImpulse_X;             float angularImpulse_Y;             //tangent Impulse             float tangentLinearImpulse_X = 0;             float tangentLinearImpulse_Y = 0;             float tangentAngularImpulse_X = 0;             float tangentAngularImpulse_Y = 0;             Vector3 tangent;             Vector3 _normal = _pair.tk_normal;              int _count = _pair.tk_count;             float J_Scalar;             float JT_Scalar;              float _miA = _pair.tk_bodyA.massI_;             float _miB = _pair.tk_bodyB.massI_;             float _iA = _pair.tk_bodyA.inertiaI_;             float _iB = _pair.tk_bodyB.inertiaI_;             float rv;                        float _uS = (float)Math.Sqrt(_pair.tk_bodyA.uS_ * _pair.tk_bodyA.uS_ + _pair.tk_bodyB.uS_ * _pair.tk_bodyB.uS_);             float _uC = (_pair.tk_bodyA.uC_ * _pair.tk_bodyA.uC_ + _pair.tk_bodyB.uC_ * _pair.tk_bodyB.uC_)/2.0f;             float _elasticity = (_pair.tk_bodyA.tk_elasticity + _pair.tk_bodyB.tk_elasticity) / 2.0f;               Vector3 _positionA = _pair.tk_bodyA.position_;             Vector3 _positionB = _pair.tk_bodyB.position_;              Vector3 _velocityA = _pair.tk_bodyA.velocity_;             float _omegaA = _pair.tk_bodyA.omega_;              Vector3 _velocityB = _pair.tk_bodyB.velocity_;             float _omegaB = _pair.tk_bodyB.omega_;                     for (int c = 0; c < _count; c++)             {                 rpA_ = _pair.tk_contacts[c].tk_position - _positionA;                 rpB_ = _pair.tk_contacts[c].tk_position - _positionB;                                  Vector3 _relativeVelocity = (_velocityB + new Vector3(rpB_.Y * -_omegaB, rpB_.X * _omegaB, 0)) -                                             (_velocityA + new Vector3(rpA_.Y * -_omegaA, rpA_.X * _omegaA, 0));                   float _countInv = 1.0f / (_count);                 float _relativeNormalVelocity = _relativeVelocity.X * _normal.X + _relativeVelocity.Y * _normal.Y;                 rv = _relativeNormalVelocity;                  #region Normal                  J_Scalar = (1 + _elasticity) * _relativeNormalVelocity;// * _count*_count                 float crossNA = (rpA_.X * _normal.Y) - (rpA_.Y * _normal.X);                 float crossNB = (rpB_.X * _normal.Y) - (rpB_.Y * _normal.X);                 float _crossASqr = crossNA * crossNA * _iA;                 float _crossBSqr = crossNB * crossNB * _iB;                                                             float invSum = _miA + _miB + _crossASqr + _crossBSqr;                 float invShareSum = _countInv / invSum;                 float J = J_Scalar * invShareSum;                  if(rv > 0)                 {                     _pair.tk_contacts[c].tk_normalImpulse = 0;                 }                 else                 {                     var contactNormalImpulse = _pair.tk_contacts[c].tk_normalImpulse;                     _pair.tk_contacts[c].tk_normalImpulse = _pair.tk_contacts[c].tk_normalImpulse + J;                     if (_pair.tk_contacts[c].tk_normalImpulse < 0)                         _pair.tk_contacts[c].tk_normalImpulse = 0;                     J = _pair.tk_contacts[c].tk_normalImpulse - contactNormalImpulse;                 }                 /* if(contactNormalImpulse !=0)                 {                      int i = 0;                     J += i;                 }*/                  linearImpulse_X = (J) * _normal.X;                 linearImpulse_Y = (J) * _normal.Y;                 angularImpulse_X = (J) * _normal.X;                 angularImpulse_Y = (J) * _normal.Y;                  #endregion                                 #region Impulse                 //if (rv > 0)                 {                     Vector2 totalImpulseLinear = new Vector2(linearImpulse_X, linearImpulse_Y) + 0 * new Vector2(tangentLinearImpulse_X, tangentLinearImpulse_Y);                     Vector2 totalImpulseAngular = new Vector2(angularImpulse_X, angularImpulse_Y) + 0 * new Vector2(tangentAngularImpulse_X, tangentAngularImpulse_Y);                      if (!(_pair.tk_bodyA.is_Sleeping || _pair.tk_bodyA.Is_Static))                     {                          _pair.tk_bodyA.oldPosition_.X -= totalImpulseLinear.X * _miA;                         _pair.tk_bodyA.oldPosition_.Y -= totalImpulseLinear.Y * _miA;                         _pair.tk_bodyA.oldTheta_ -= (rpA_.X * totalImpulseAngular.Y - rpA_.Y * totalImpulseAngular.X) * _iA;                     }                     if (!(_pair.tk_bodyB.is_Sleeping || _pair.tk_bodyB.Is_Static))                     {                         _pair.tk_bodyB.oldPosition_.X += totalImpulseLinear.X * _miB;                         _pair.tk_bodyB.oldPosition_.Y += totalImpulseLinear.Y * _miB;                         _pair.tk_bodyB.oldTheta_ += (rpB_.X * totalImpulseAngular.Y - rpB_.Y * totalImpulseAngular.X) * _iB;                     }                 }                 #endregion              }          } 

Thx in advance for your advise