Box2D 2.3.0 A 2D Physics Engine for Games

- Main Page
- Classes
- Files

- File List
- File Members

b2WheelJoint.h
1 /*
2 * Copyright (c) 2006-2011 Erin Catto http://www.box2d.org
3 *
4 * This software is provided 'as-is', without any express or implied
5 * warranty. In no event will the authors be held liable for any damages
6 * arising from the use of this software.
7 * Permission is granted to anyone to use this software for any purpose,
8 * including commercial applications, and to alter it and redistribute it
9 * freely, subject to the following restrictions:
10 * 1. The origin of this software must not be misrepresented; you must not
11 * claim that you wrote the original software. If you use this software
12 * in a product, an acknowledgment in the product documentation would be
13 * appreciated but is not required.
14 * 2. Altered source versions must be plainly marked as such, and must not be
15 * misrepresented as being the original software.
16 * 3. This notice may not be removed or altered from any source distribution.
17 */
18
19 #ifndef B2_WHEEL_JOINT_H
20 #define B2_WHEEL_JOINT_H
21
22 #include <Box2D/Dynamics/Joints/b2Joint.h>
23
30 struct b2WheelJointDef : public b2JointDef
31 {
32 b2WheelJointDef()
33 {
34 type = e_wheelJoint;
35 localAnchorA.SetZero();
36 localAnchorB.SetZero();
37 localAxisA.Set(1.0f, 0.0f);
38 enableMotor = false;
39 maxMotorTorque = 0.0f;
40 motorSpeed = 0.0f;
41 frequencyHz = 2.0f;
42 dampingRatio = 0.7f;
43 }
44
47 void Initialize(b2Body* bodyA, b2Body* bodyB, const b2Vec2& anchor, const b2Vec2& axis);
48
50 b2Vec2 localAnchorA;
51
53 b2Vec2 localAnchorB;
54
56 b2Vec2 localAxisA;
57
59 bool enableMotor;
60
62 float32 maxMotorTorque;
63
65 float32 motorSpeed;
66
68 float32 frequencyHz;
69
71 float32 dampingRatio;
72 };
73
79 class b2WheelJoint : public b2Joint
80 {
81 public:
82 b2Vec2 GetAnchorA() const;
83 b2Vec2 GetAnchorB() const;
84
85 b2Vec2 GetReactionForce(float32 inv_dt) const;
86 float32 GetReactionTorque(float32 inv_dt) const;
87
89 const b2Vec2& GetLocalAnchorA() const { return m_localAnchorA; }
90
92 const b2Vec2& GetLocalAnchorB() const { return m_localAnchorB; }
93
95 const b2Vec2& GetLocalAxisA() const { return m_localXAxisA; }
96
98 float32 GetJointTranslation() const;
99
101 float32 GetJointSpeed() const;
102
104 bool IsMotorEnabled() const;
105
107 void EnableMotor(bool flag);
108
110 void SetMotorSpeed(float32 speed);
111
113 float32 GetMotorSpeed() const;
114
116 void SetMaxMotorTorque(float32 torque);
117 float32 GetMaxMotorTorque() const;
118
120 float32 GetMotorTorque(float32 inv_dt) const;
121
123 void SetSpringFrequencyHz(float32 hz);
124 float32 GetSpringFrequencyHz() const;
125
127 void SetSpringDampingRatio(float32 ratio);
128 float32 GetSpringDampingRatio() const;
129
131 void Dump();
132
133 protected:
134
135 friend class b2Joint;
136 b2WheelJoint(const b2WheelJointDef* def);
137
138 void InitVelocityConstraints(const b2SolverData& data);
139 void SolveVelocityConstraints(const b2SolverData& data);
140 bool SolvePositionConstraints(const b2SolverData& data);
141
142 float32 m_frequencyHz;
143 float32 m_dampingRatio;
144
145 // Solver shared
146 b2Vec2 m_localAnchorA;
147 b2Vec2 m_localAnchorB;
148 b2Vec2 m_localXAxisA;
149 b2Vec2 m_localYAxisA;
150
151 float32 m_impulse;
152 float32 m_motorImpulse;
153 float32 m_springImpulse;
154
155 float32 m_maxMotorTorque;
156 float32 m_motorSpeed;
157 bool m_enableMotor;
158
159 // Solver temp
160 int32 m_indexA;
161 int32 m_indexB;
162 b2Vec2 m_localCenterA;
163 b2Vec2 m_localCenterB;
164 float32 m_invMassA;
165 float32 m_invMassB;
166 float32 m_invIA;
167 float32 m_invIB;
168
169 b2Vec2 m_ax, m_ay;
170 float32 m_sAx, m_sBx;
171 float32 m_sAy, m_sBy;
172
173 float32 m_mass;
174 float32 m_motorMass;
175 float32 m_springMass;
176
177 float32 m_bias;
178 float32 m_gamma;
179 };
180
181 inline float32 b2WheelJoint::GetMotorSpeed() const
182 {
183 return m_motorSpeed;
184 }
185
186 inline float32 b2WheelJoint::GetMaxMotorTorque() const
187 {
188 return m_maxMotorTorque;
189 }
190
191 inline void b2WheelJoint::SetSpringFrequencyHz(float32 hz)
192 {
193 m_frequencyHz = hz;
194 }
195
196 inline float32 b2WheelJoint::GetSpringFrequencyHz() const
197 {
198 return m_frequencyHz;
199 }
200
201 inline void b2WheelJoint::SetSpringDampingRatio(float32 ratio)
202 {
203 m_dampingRatio = ratio;
204 }
205
206 inline float32 b2WheelJoint::GetSpringDampingRatio() const
207 {
208 return m_dampingRatio;
209 }
210
211 #endif
b2WheelJoint::SetSpringDampingRatio
void SetSpringDampingRatio(float32 ratio)
Set/Get the spring damping ratio.
Definition: b2WheelJoint.h:201
b2WheelJointDef
Definition: b2WheelJoint.h:30
b2WheelJoint::GetAnchorA
b2Vec2 GetAnchorA() const
Get the anchor point on bodyA in world coordinates.
Definition: b2WheelJoint.cpp:329
b2WheelJoint::GetReactionTorque
float32 GetReactionTorque(float32 inv_dt) const
Get the reaction torque on bodyB in N*m.
Definition: b2WheelJoint.cpp:344
b2JointDef::bodyA
b2Body * bodyA
The first attached body.
Definition: b2Joint.h:92
b2WheelJoint::Dump
void Dump()
Dump to b2Log.
Definition: b2WheelJoint.cpp:401
b2WheelJointDef::localAnchorA
b2Vec2 localAnchorA
The local anchor point relative to bodyA's origin.
Definition: b2WheelJoint.h:50
b2JointDef::bodyB
b2Body * bodyB
The second attached body.
Definition: b2Joint.h:95
b2WheelJoint::EnableMotor
void EnableMotor(bool flag)
Enable/disable the joint motor.
Definition: b2WheelJoint.cpp:375
b2WheelJoint::IsMotorEnabled
bool IsMotorEnabled() const
Is the joint motor enabled?
Definition: b2WheelJoint.cpp:370
b2WheelJoint::GetJointTranslation
float32 GetJointTranslation() const
Get the current joint translation, usually in meters.
Definition: b2WheelJoint.cpp:349
b2WheelJoint::GetReactionForce
b2Vec2 GetReactionForce(float32 inv_dt) const
Get the reaction force on bodyB at the joint anchor in Newtons.
Definition: b2WheelJoint.cpp:339
b2Joint
Definition: b2Joint.h:103
b2WheelJointDef::frequencyHz
float32 frequencyHz
Suspension frequency, zero indicates no suspension.
Definition: b2WheelJoint.h:68
b2Vec2::Set
void Set(float32 x_, float32 y_)
Set this vector to some specified coordinates.
Definition: b2Math.h:65
b2Vec2::SetZero
void SetZero()
Set this vector to all zeros.
Definition: b2Math.h:62
b2WheelJointDef::enableMotor
bool enableMotor
Enable/disable the joint motor.
Definition: b2WheelJoint.h:59
b2WheelJoint::GetMotorSpeed
float32 GetMotorSpeed() const
Get the motor speed, usually in radians per second.
Definition: b2WheelJoint.h:181
b2JointDef::type
b2JointType type
The joint type is set automatically for concrete joint types.
Definition: b2Joint.h:86
b2WheelJoint::GetLocalAxisA
const b2Vec2 & GetLocalAxisA() const
The local joint axis relative to bodyA.
Definition: b2WheelJoint.h:95
b2WheelJoint::GetLocalAnchorA
const b2Vec2 & GetLocalAnchorA() const
The local anchor point relative to bodyA's origin.
Definition: b2WheelJoint.h:89
b2SolverData
Solver Data.
Definition: b2TimeStep.h:63
b2WheelJoint::GetAnchorB
b2Vec2 GetAnchorB() const
Get the anchor point on bodyB in world coordinates.
Definition: b2WheelJoint.cpp:334
b2WheelJointDef::maxMotorTorque
float32 maxMotorTorque
The maximum motor torque, usually in N-m.
Definition: b2WheelJoint.h:62
b2JointDef
Joint definitions are used to construct joints.
Definition: b2Joint.h:74
b2WheelJointDef::localAnchorB
b2Vec2 localAnchorB
The local anchor point relative to bodyB's origin.
Definition: b2WheelJoint.h:53
b2Body
A rigid body. These are created via b2World::CreateBody.
Definition: b2Body.h:126
b2WheelJointDef::motorSpeed
float32 motorSpeed
The desired motor speed in radians per second.
Definition: b2WheelJoint.h:65
b2Vec2
A 2D column vector.
Definition: b2Math.h:53
b2WheelJoint::GetLocalAnchorB
const b2Vec2 & GetLocalAnchorB() const
The local anchor point relative to bodyB's origin.
Definition: b2WheelJoint.h:92
b2WheelJoint::SetMotorSpeed
void SetMotorSpeed(float32 speed)
Set the motor speed, usually in radians per second.
Definition: b2WheelJoint.cpp:382
b2WheelJoint::GetJointSpeed
float32 GetJointSpeed() const
Get the current joint translation speed, usually in meters per second.
Definition: b2WheelJoint.cpp:363
b2WheelJointDef::Initialize
void Initialize(b2Body *bodyA, b2Body *bodyB, const b2Vec2 &anchor, const b2Vec2 &axis)
Definition: b2WheelJoint.cpp:39
b2WheelJoint
Definition: b2WheelJoint.h:79
b2WheelJointDef::dampingRatio
float32 dampingRatio
Suspension damping ratio, one indicates critical damping.
Definition: b2WheelJoint.h:71
b2WheelJointDef::localAxisA
b2Vec2 localAxisA
The local translation axis in bodyA.
Definition: b2WheelJoint.h:56
b2WheelJoint::GetMotorTorque
float32 GetMotorTorque(float32 inv_dt) const
Get the current motor torque given the inverse time step, usually in N-m.
Definition: b2WheelJoint.cpp:396
b2WheelJoint::SetMaxMotorTorque
void SetMaxMotorTorque(float32 torque)
Set/Get the maximum motor force, usually in N-m.
Definition: b2WheelJoint.cpp:389
b2WheelJoint::SetSpringFrequencyHz
void SetSpringFrequencyHz(float32 hz)
Set/Get the spring frequency in hertz. Setting the frequency to zero disables the spring...
Definition: b2WheelJoint.h:191