26 #define CP_DefineClassGetter(t) const cpConstraintClass * t##GetClass(void){return (cpConstraintClass *)&klass;}
35 return cpvsub(v2_sum, v1_sum);
40 return cpvdot(relative_velocity(a, b, r1, r2), n);
52 apply_impulse(a,
cpvneg(j), r1);
53 apply_impulse(b, j, r2);
66 apply_bias_impulse(a,
cpvneg(j), r1);
67 apply_bias_impulse(b, j, r2);
80 cpFloat value = k_scalar_body(a, r1, n) + k_scalar_body(b, r2, n);
81 cpAssertSoft(value != 0.0,
"Unsolvable collision or constraint.");
92 cpFloat k11 = m_sum, k12 = 0.0f;
93 cpFloat k21 = 0.0f, k22 = m_sum;
97 cpFloat r1xsq = r1.x * r1.x * a_i_inv;
98 cpFloat r1ysq = r1.y * r1.y * a_i_inv;
99 cpFloat r1nxy = -r1.x * r1.y * a_i_inv;
100 k11 += r1ysq; k12 += r1nxy;
101 k21 += r1nxy; k22 += r1xsq;
105 cpFloat r2xsq = r2.x * r2.x * b_i_inv;
106 cpFloat r2ysq = r2.y * r2.y * b_i_inv;
107 cpFloat r2nxy = -r2.x * r2.y * b_i_inv;
108 k11 += r2ysq; k12 += r2nxy;
109 k21 += r2nxy; k22 += r2xsq;
112 cpFloat det = k11*k22 - k12*k21;
113 cpAssertSoft(det != 0.0,
"Unsolvable constraint.");
117 k22*det_inv, -k12*det_inv,
118 -k21*det_inv, k11*det_inv
125 return 1.0f - cpfpow(errorBias, dt);