Changeset 8393 for code/trunk/src/external/bullet/BulletDynamics/ConstraintSolver/btTypedConstraint.cpp
- Timestamp:
- May 3, 2011, 5:07:42 AM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk/src/external/bullet/BulletDynamics/ConstraintSolver/btTypedConstraint.cpp
r8351 r8393 30 30 m_rbB(getFixedBody()), 31 31 m_appliedImpulse(btScalar(0.)), 32 m_dbgDrawSize(DEFAULT_DEBUGDRAW_SIZE) 32 m_dbgDrawSize(DEFAULT_DEBUGDRAW_SIZE), 33 m_breakingImpulseThreshold(SIMD_INFINITY), 34 m_isEnabled(true) 33 35 { 34 36 } … … 43 45 m_rbB(rbB), 44 46 m_appliedImpulse(btScalar(0.)), 45 m_dbgDrawSize(DEFAULT_DEBUGDRAW_SIZE) 47 m_dbgDrawSize(DEFAULT_DEBUGDRAW_SIZE), 48 m_breakingImpulseThreshold(SIMD_INFINITY), 49 m_isEnabled(true) 46 50 { 47 51 } … … 141 145 } 142 146 147 148 void btAngularLimit::set(btScalar low, btScalar high, btScalar _softness, btScalar _biasFactor, btScalar _relaxationFactor) 149 { 150 m_halfRange = (high - low) / 2.0f; 151 m_center = btNormalizeAngle(low + m_halfRange); 152 m_softness = _softness; 153 m_biasFactor = _biasFactor; 154 m_relaxationFactor = _relaxationFactor; 155 } 156 157 void btAngularLimit::test(const btScalar angle) 158 { 159 m_correction = 0.0f; 160 m_sign = 0.0f; 161 m_solveLimit = false; 162 163 if (m_halfRange >= 0.0f) 164 { 165 btScalar deviation = btNormalizeAngle(angle - m_center); 166 if (deviation < -m_halfRange) 167 { 168 m_solveLimit = true; 169 m_correction = - (deviation + m_halfRange); 170 m_sign = +1.0f; 171 } 172 else if (deviation > m_halfRange) 173 { 174 m_solveLimit = true; 175 m_correction = m_halfRange - deviation; 176 m_sign = -1.0f; 177 } 178 } 179 } 180 181 182 btScalar btAngularLimit::getError() const 183 { 184 return m_correction * m_sign; 185 } 186 187 void btAngularLimit::fit(btScalar& angle) const 188 { 189 if (m_halfRange > 0.0f) 190 { 191 btScalar relativeAngle = btNormalizeAngle(angle - m_center); 192 if (!btEqual(relativeAngle, m_halfRange)) 193 { 194 if (relativeAngle > 0.0f) 195 { 196 angle = getHigh(); 197 } 198 else 199 { 200 angle = getLow(); 201 } 202 } 203 } 204 } 205 206 btScalar btAngularLimit::getLow() const 207 { 208 return btNormalizeAngle(m_center - m_halfRange); 209 } 210 211 btScalar btAngularLimit::getHigh() const 212 { 213 return btNormalizeAngle(m_center + m_halfRange); 214 }
Note: See TracChangeset
for help on using the changeset viewer.