box2d-rails 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. data/.gitignore +17 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +29 -0
  5. data/Rakefile +1 -0
  6. data/box2d-rails.gemspec +20 -0
  7. data/lib/box2d-rails.rb +8 -0
  8. data/lib/box2d-rails/version.rb +5 -0
  9. data/vendor/assets/javascripts/box2d/collision/ClipVertex.js +35 -0
  10. data/vendor/assets/javascripts/box2d/collision/Features.js +61 -0
  11. data/vendor/assets/javascripts/box2d/collision/b2AABB.js +45 -0
  12. data/vendor/assets/javascripts/box2d/collision/b2Bound.js +43 -0
  13. data/vendor/assets/javascripts/box2d/collision/b2BoundValues.js +31 -0
  14. data/vendor/assets/javascripts/box2d/collision/b2BroadPhase.js +898 -0
  15. data/vendor/assets/javascripts/box2d/collision/b2BufferedPair.js +26 -0
  16. data/vendor/assets/javascripts/box2d/collision/b2Collision.js +738 -0
  17. data/vendor/assets/javascripts/box2d/collision/b2ContactID.js +52 -0
  18. data/vendor/assets/javascripts/box2d/collision/b2ContactPoint.js +35 -0
  19. data/vendor/assets/javascripts/box2d/collision/b2Distance.js +333 -0
  20. data/vendor/assets/javascripts/box2d/collision/b2Manifold.js +34 -0
  21. data/vendor/assets/javascripts/box2d/collision/b2OBB.js +34 -0
  22. data/vendor/assets/javascripts/box2d/collision/b2Pair.js +60 -0
  23. data/vendor/assets/javascripts/box2d/collision/b2PairCallback.js +34 -0
  24. data/vendor/assets/javascripts/box2d/collision/b2PairManager.js +386 -0
  25. data/vendor/assets/javascripts/box2d/collision/b2Proxy.js +40 -0
  26. data/vendor/assets/javascripts/box2d/collision/shapes/b2BoxDef.js +49 -0
  27. data/vendor/assets/javascripts/box2d/collision/shapes/b2CircleDef.js +49 -0
  28. data/vendor/assets/javascripts/box2d/collision/shapes/b2CircleShape.js +198 -0
  29. data/vendor/assets/javascripts/box2d/collision/shapes/b2MassData.js +36 -0
  30. data/vendor/assets/javascripts/box2d/collision/shapes/b2PolyDef.js +58 -0
  31. data/vendor/assets/javascripts/box2d/collision/shapes/b2PolyShape.js +492 -0
  32. data/vendor/assets/javascripts/box2d/collision/shapes/b2Shape.js +339 -0
  33. data/vendor/assets/javascripts/box2d/collision/shapes/b2ShapeDef.js +109 -0
  34. data/vendor/assets/javascripts/box2d/common/b2Settings.js +72 -0
  35. data/vendor/assets/javascripts/box2d/common/math/b2Mat22.js +130 -0
  36. data/vendor/assets/javascripts/box2d/common/math/b2Math.js +218 -0
  37. data/vendor/assets/javascripts/box2d/common/math/b2Vec2.js +131 -0
  38. data/vendor/assets/javascripts/box2d/dynamics/b2Body.js +469 -0
  39. data/vendor/assets/javascripts/box2d/dynamics/b2BodyDef.js +69 -0
  40. data/vendor/assets/javascripts/box2d/dynamics/b2CollisionFilter.js +42 -0
  41. data/vendor/assets/javascripts/box2d/dynamics/b2ContactManager.js +337 -0
  42. data/vendor/assets/javascripts/box2d/dynamics/b2Island.js +331 -0
  43. data/vendor/assets/javascripts/box2d/dynamics/b2TimeStep.js +27 -0
  44. data/vendor/assets/javascripts/box2d/dynamics/b2World.js +522 -0
  45. data/vendor/assets/javascripts/box2d/dynamics/b2WorldListener.js +52 -0
  46. data/vendor/assets/javascripts/box2d/dynamics/contacts/b2CircleContact.js +102 -0
  47. data/vendor/assets/javascripts/box2d/dynamics/contacts/b2Conservative.js +228 -0
  48. data/vendor/assets/javascripts/box2d/dynamics/contacts/b2Contact.js +201 -0
  49. data/vendor/assets/javascripts/box2d/dynamics/contacts/b2ContactConstraint.js +45 -0
  50. data/vendor/assets/javascripts/box2d/dynamics/contacts/b2ContactConstraintPoint.js +40 -0
  51. data/vendor/assets/javascripts/box2d/dynamics/contacts/b2ContactNode.js +33 -0
  52. data/vendor/assets/javascripts/box2d/dynamics/contacts/b2ContactRegister.js +30 -0
  53. data/vendor/assets/javascripts/box2d/dynamics/contacts/b2ContactSolver.js +537 -0
  54. data/vendor/assets/javascripts/box2d/dynamics/contacts/b2NullContact.js +65 -0
  55. data/vendor/assets/javascripts/box2d/dynamics/contacts/b2PolyAndCircleContact.js +103 -0
  56. data/vendor/assets/javascripts/box2d/dynamics/contacts/b2PolyContact.js +163 -0
  57. data/vendor/assets/javascripts/box2d/dynamics/joints/b2DistanceJoint.js +264 -0
  58. data/vendor/assets/javascripts/box2d/dynamics/joints/b2DistanceJointDef.js +49 -0
  59. data/vendor/assets/javascripts/box2d/dynamics/joints/b2GearJoint.js +307 -0
  60. data/vendor/assets/javascripts/box2d/dynamics/joints/b2GearJointDef.js +50 -0
  61. data/vendor/assets/javascripts/box2d/dynamics/joints/b2Jacobian.js +49 -0
  62. data/vendor/assets/javascripts/box2d/dynamics/joints/b2Joint.js +200 -0
  63. data/vendor/assets/javascripts/box2d/dynamics/joints/b2JointDef.js +40 -0
  64. data/vendor/assets/javascripts/box2d/dynamics/joints/b2JointNode.js +33 -0
  65. data/vendor/assets/javascripts/box2d/dynamics/joints/b2MouseJoint.js +234 -0
  66. data/vendor/assets/javascripts/box2d/dynamics/joints/b2MouseJointDef.js +53 -0
  67. data/vendor/assets/javascripts/box2d/dynamics/joints/b2PrismaticJoint.js +676 -0
  68. data/vendor/assets/javascripts/box2d/dynamics/joints/b2PrismaticJointDef.js +56 -0
  69. data/vendor/assets/javascripts/box2d/dynamics/joints/b2PulleyJoint.js +618 -0
  70. data/vendor/assets/javascripts/box2d/dynamics/joints/b2PulleyJointDef.js +70 -0
  71. data/vendor/assets/javascripts/box2d/dynamics/joints/b2RevoluteJoint.js +491 -0
  72. data/vendor/assets/javascripts/box2d/dynamics/joints/b2RevoluteJointDef.js +55 -0
  73. metadata +133 -0
@@ -0,0 +1,49 @@
1
+ /*
2
+ * Copyright (c) 2006-2007 Erin Catto http:
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, and must not be
15
+ * misrepresented the original software.
16
+ * 3. This notice may not be removed or altered from any source distribution.
17
+ */
18
+
19
+
20
+
21
+
22
+
23
+ var b2DistanceJointDef = Class.create();
24
+ Object.extend(b2DistanceJointDef.prototype, b2JointDef.prototype);
25
+ Object.extend(b2DistanceJointDef.prototype,
26
+ {
27
+ initialize: function()
28
+ {
29
+ // The constructor for b2JointDef
30
+ this.type = b2Joint.e_unknownJoint;
31
+ this.userData = null;
32
+ this.body1 = null;
33
+ this.body2 = null;
34
+ this.collideConnected = false;
35
+ //
36
+
37
+ // initialize instance variables for references
38
+ this.anchorPoint1 = new b2Vec2();
39
+ this.anchorPoint2 = new b2Vec2();
40
+ //
41
+
42
+ this.type = b2Joint.e_distanceJoint;
43
+ //this.anchorPoint1.Set(0.0, 0.0);
44
+ //this.anchorPoint2.Set(0.0, 0.0);
45
+ },
46
+
47
+ anchorPoint1: new b2Vec2(),
48
+ anchorPoint2: new b2Vec2()});
49
+
@@ -0,0 +1,307 @@
1
+ /*
2
+ * Copyright (c) 2006-2007 Erin Catto http:
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, and must not be
15
+ * misrepresented the original software.
16
+ * 3. This notice may not be removed or altered from any source distribution.
17
+ */
18
+
19
+
20
+
21
+
22
+
23
+
24
+ var b2GearJoint = Class.create();
25
+ Object.extend(b2GearJoint.prototype, b2Joint.prototype);
26
+ Object.extend(b2GearJoint.prototype,
27
+ {
28
+ GetAnchor1: function(){
29
+ //return this.m_body1.m_position + b2MulMV(this.m_body1.m_R, this.m_localAnchor1);
30
+ var tMat = this.m_body1.m_R;
31
+ return new b2Vec2( this.m_body1.m_position.x + (tMat.col1.x * this.m_localAnchor1.x + tMat.col2.x * this.m_localAnchor1.y),
32
+ this.m_body1.m_position.y + (tMat.col1.y * this.m_localAnchor1.x + tMat.col2.y * this.m_localAnchor1.y));
33
+ },
34
+ GetAnchor2: function(){
35
+ //return this.m_body2->m_position + b2Mul(this.m_body2->m_R, this.m_localAnchor2);
36
+ var tMat = this.m_body2.m_R;
37
+ return new b2Vec2( this.m_body2.m_position.x + (tMat.col1.x * this.m_localAnchor2.x + tMat.col2.x * this.m_localAnchor2.y),
38
+ this.m_body2.m_position.y + (tMat.col1.y * this.m_localAnchor2.x + tMat.col2.y * this.m_localAnchor2.y));
39
+ },
40
+
41
+ GetReactionForce: function(invTimeStep){
42
+ //b2Vec2 F(0.0f, 0.0f);
43
+ return new b2Vec2();
44
+ },
45
+ GetReactionTorque: function(invTimeStep){
46
+ return 0.0;
47
+ },
48
+
49
+ GetRatio: function(){
50
+ return this.m_ratio;
51
+ },
52
+
53
+ //--------------- Internals Below -------------------
54
+
55
+ initialize: function(def){
56
+ // The constructor for b2Joint
57
+ // initialize instance variables for references
58
+ this.m_node1 = new b2JointNode();
59
+ this.m_node2 = new b2JointNode();
60
+ //
61
+ this.m_type = def.type;
62
+ this.m_prev = null;
63
+ this.m_next = null;
64
+ this.m_body1 = def.body1;
65
+ this.m_body2 = def.body2;
66
+ this.m_collideConnected = def.collideConnected;
67
+ this.m_islandFlag = false;
68
+ this.m_userData = def.userData;
69
+ //
70
+
71
+ // initialize instance variables for references
72
+ this.m_groundAnchor1 = new b2Vec2();
73
+ this.m_groundAnchor2 = new b2Vec2();
74
+ this.m_localAnchor1 = new b2Vec2();
75
+ this.m_localAnchor2 = new b2Vec2();
76
+ this.m_J = new b2Jacobian();
77
+ //
78
+
79
+ // parent constructor
80
+ //super(def);
81
+
82
+ //b2Settings.b2Assert(def.joint1.m_type == b2Joint.e_revoluteJoint || def.joint1.m_type == b2Joint.e_prismaticJoint);
83
+ //b2Settings.b2Assert(def.joint2.m_type == b2Joint.e_revoluteJoint || def.joint2.m_type == b2Joint.e_prismaticJoint);
84
+ //b2Settings.b2Assert(def.joint1.m_body1.IsStatic());
85
+ //b2Settings.b2Assert(def.joint2.m_body1.IsStatic());
86
+
87
+ this.m_revolute1 = null;
88
+ this.m_prismatic1 = null;
89
+ this.m_revolute2 = null;
90
+ this.m_prismatic2 = null;
91
+
92
+ var coordinate1;
93
+ var coordinate2;
94
+
95
+ this.m_ground1 = def.joint1.m_body1;
96
+ this.m_body1 = def.joint1.m_body2;
97
+ if (def.joint1.m_type == b2Joint.e_revoluteJoint)
98
+ {
99
+ this.m_revolute1 = def.joint1;
100
+ this.m_groundAnchor1.SetV( this.m_revolute1.m_localAnchor1 );
101
+ this.m_localAnchor1.SetV( this.m_revolute1.m_localAnchor2 );
102
+ coordinate1 = this.m_revolute1.GetJointAngle();
103
+ }
104
+ else
105
+ {
106
+ this.m_prismatic1 = def.joint1;
107
+ this.m_groundAnchor1.SetV( this.m_prismatic1.m_localAnchor1 );
108
+ this.m_localAnchor1.SetV( this.m_prismatic1.m_localAnchor2 );
109
+ coordinate1 = this.m_prismatic1.GetJointTranslation();
110
+ }
111
+
112
+ this.m_ground2 = def.joint2.m_body1;
113
+ this.m_body2 = def.joint2.m_body2;
114
+ if (def.joint2.m_type == b2Joint.e_revoluteJoint)
115
+ {
116
+ this.m_revolute2 = def.joint2;
117
+ this.m_groundAnchor2.SetV( this.m_revolute2.m_localAnchor1 );
118
+ this.m_localAnchor2.SetV( this.m_revolute2.m_localAnchor2 );
119
+ coordinate2 = this.m_revolute2.GetJointAngle();
120
+ }
121
+ else
122
+ {
123
+ this.m_prismatic2 = def.joint2;
124
+ this.m_groundAnchor2.SetV( this.m_prismatic2.m_localAnchor1 );
125
+ this.m_localAnchor2.SetV( this.m_prismatic2.m_localAnchor2 );
126
+ coordinate2 = this.m_prismatic2.GetJointTranslation();
127
+ }
128
+
129
+ this.m_ratio = def.ratio;
130
+
131
+ this.m_constant = coordinate1 + this.m_ratio * coordinate2;
132
+
133
+ this.m_impulse = 0.0;
134
+
135
+ },
136
+
137
+ PrepareVelocitySolver: function(){
138
+ var g1 = this.m_ground1;
139
+ var g2 = this.m_ground2;
140
+ var b1 = this.m_body1;
141
+ var b2 = this.m_body2;
142
+
143
+ // temp vars
144
+ var ugX;
145
+ var ugY;
146
+ var rX;
147
+ var rY;
148
+ var tMat;
149
+ var tVec;
150
+ var crug;
151
+
152
+ var K = 0.0;
153
+ this.m_J.SetZero();
154
+
155
+ if (this.m_revolute1)
156
+ {
157
+ this.m_J.angular1 = -1.0;
158
+ K += b1.m_invI;
159
+ }
160
+ else
161
+ {
162
+ //b2Vec2 ug = b2MulMV(g1->m_R, this.m_prismatic1->m_localXAxis1);
163
+ tMat = g1.m_R;
164
+ tVec = this.m_prismatic1.m_localXAxis1;
165
+ ugX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;
166
+ ugY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;
167
+ //b2Vec2 r = b2MulMV(b1->m_R, this.m_localAnchor1);
168
+ tMat = b1.m_R;
169
+ rX = tMat.col1.x * this.m_localAnchor1.x + tMat.col2.x * this.m_localAnchor1.y;
170
+ rY = tMat.col1.y * this.m_localAnchor1.x + tMat.col2.y * this.m_localAnchor1.y;
171
+
172
+ //var crug = b2Cross(r, ug);
173
+ crug = rX * ugY - rY * ugX;
174
+ //this.m_J.linear1 = -ug;
175
+ this.m_J.linear1.Set(-ugX, -ugY);
176
+ this.m_J.angular1 = -crug;
177
+ K += b1.m_invMass + b1.m_invI * crug * crug;
178
+ }
179
+
180
+ if (this.m_revolute2)
181
+ {
182
+ this.m_J.angular2 = -this.m_ratio;
183
+ K += this.m_ratio * this.m_ratio * b2.m_invI;
184
+ }
185
+ else
186
+ {
187
+ //b2Vec2 ug = b2Mul(g2->m_R, this.m_prismatic2->m_localXAxis1);
188
+ tMat = g2.m_R;
189
+ tVec = this.m_prismatic2.m_localXAxis1;
190
+ ugX = tMat.col1.x * tVec.x + tMat.col2.x * tVec.y;
191
+ ugY = tMat.col1.y * tVec.x + tMat.col2.y * tVec.y;
192
+ //b2Vec2 r = b2Mul(b2->m_R, this.m_localAnchor2);
193
+ tMat = b2.m_R;
194
+ rX = tMat.col1.x * this.m_localAnchor2.x + tMat.col2.x * this.m_localAnchor2.y;
195
+ rY = tMat.col1.y * this.m_localAnchor2.x + tMat.col2.y * this.m_localAnchor2.y;
196
+ //float32 crug = b2Cross(r, ug);
197
+ crug = rX * ugY - rY * ugX;
198
+ //this.m_J.linear2 = -this.m_ratio * ug;
199
+ this.m_J.linear2.Set(-this.m_ratio*ugX, -this.m_ratio*ugY);
200
+ this.m_J.angular2 = -this.m_ratio * crug;
201
+ K += this.m_ratio * this.m_ratio * (b2.m_invMass + b2.m_invI * crug * crug);
202
+ }
203
+
204
+ // Compute effective mass.
205
+ //b2Settings.b2Assert(K > 0.0);
206
+ this.m_mass = 1.0 / K;
207
+
208
+ // Warm starting.
209
+ //b1.m_linearVelocity += b1.m_invMass * this.m_impulse * this.m_J.linear1;
210
+ b1.m_linearVelocity.x += b1.m_invMass * this.m_impulse * this.m_J.linear1.x;
211
+ b1.m_linearVelocity.y += b1.m_invMass * this.m_impulse * this.m_J.linear1.y;
212
+ b1.m_angularVelocity += b1.m_invI * this.m_impulse * this.m_J.angular1;
213
+ //b2.m_linearVelocity += b2.m_invMass * this.m_impulse * this.m_J.linear2;
214
+ b2.m_linearVelocity.x += b2.m_invMass * this.m_impulse * this.m_J.linear2.x;
215
+ b2.m_linearVelocity.y += b2.m_invMass * this.m_impulse * this.m_J.linear2.y;
216
+ b2.m_angularVelocity += b2.m_invI * this.m_impulse * this.m_J.angular2;
217
+ },
218
+
219
+
220
+ SolveVelocityConstraints: function(step){
221
+ var b1 = this.m_body1;
222
+ var b2 = this.m_body2;
223
+
224
+ var Cdot = this.m_J.Compute( b1.m_linearVelocity, b1.m_angularVelocity,
225
+ b2.m_linearVelocity, b2.m_angularVelocity);
226
+
227
+ var impulse = -this.m_mass * Cdot;
228
+ this.m_impulse += impulse;
229
+
230
+ b1.m_linearVelocity.x += b1.m_invMass * impulse * this.m_J.linear1.x;
231
+ b1.m_linearVelocity.y += b1.m_invMass * impulse * this.m_J.linear1.y;
232
+ b1.m_angularVelocity += b1.m_invI * impulse * this.m_J.angular1;
233
+ b2.m_linearVelocity.x += b2.m_invMass * impulse * this.m_J.linear2.x;
234
+ b2.m_linearVelocity.y += b2.m_invMass * impulse * this.m_J.linear2.y;
235
+ b2.m_angularVelocity += b2.m_invI * impulse * this.m_J.angular2;
236
+ },
237
+
238
+ SolvePositionConstraints: function(){
239
+ var linearError = 0.0;
240
+
241
+ var b1 = this.m_body1;
242
+ var b2 = this.m_body2;
243
+
244
+ var coordinate1;
245
+ var coordinate2;
246
+ if (this.m_revolute1)
247
+ {
248
+ coordinate1 = this.m_revolute1.GetJointAngle();
249
+ }
250
+ else
251
+ {
252
+ coordinate1 = this.m_prismatic1.GetJointTranslation();
253
+ }
254
+
255
+ if (this.m_revolute2)
256
+ {
257
+ coordinate2 = this.m_revolute2.GetJointAngle();
258
+ }
259
+ else
260
+ {
261
+ coordinate2 = this.m_prismatic2.GetJointTranslation();
262
+ }
263
+
264
+ var C = this.m_constant - (coordinate1 + this.m_ratio * coordinate2);
265
+
266
+ var impulse = -this.m_mass * C;
267
+
268
+ b1.m_position.x += b1.m_invMass * impulse * this.m_J.linear1.x;
269
+ b1.m_position.y += b1.m_invMass * impulse * this.m_J.linear1.y;
270
+ b1.m_rotation += b1.m_invI * impulse * this.m_J.angular1;
271
+ b2.m_position.x += b2.m_invMass * impulse * this.m_J.linear2.x;
272
+ b2.m_position.y += b2.m_invMass * impulse * this.m_J.linear2.y;
273
+ b2.m_rotation += b2.m_invI * impulse * this.m_J.angular2;
274
+ b1.m_R.Set(b1.m_rotation);
275
+ b2.m_R.Set(b2.m_rotation);
276
+
277
+ return linearError < b2Settings.b2_linearSlop;
278
+ },
279
+
280
+ m_ground1: null,
281
+ m_ground2: null,
282
+
283
+ // One of these is NULL.
284
+ m_revolute1: null,
285
+ m_prismatic1: null,
286
+
287
+ // One of these is NULL.
288
+ m_revolute2: null,
289
+ m_prismatic2: null,
290
+
291
+ m_groundAnchor1: new b2Vec2(),
292
+ m_groundAnchor2: new b2Vec2(),
293
+
294
+ m_localAnchor1: new b2Vec2(),
295
+ m_localAnchor2: new b2Vec2(),
296
+
297
+ m_J: new b2Jacobian(),
298
+
299
+ m_constant: null,
300
+ m_ratio: null,
301
+
302
+ // Effective mass
303
+ m_mass: null,
304
+
305
+ // Impulse for accumulation/warm starting.
306
+ m_impulse: null});
307
+
@@ -0,0 +1,50 @@
1
+ /*
2
+ * Copyright (c) 2006-2007 Erin Catto http:
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, and must not be
15
+ * misrepresented the original software.
16
+ * 3. This notice may not be removed or altered from any source distribution.
17
+ */
18
+
19
+
20
+
21
+
22
+
23
+
24
+ // A gear joint is used to connect two joints together. Either joint
25
+ // can be a revolute or prismatic joint. You specify a gear ratio
26
+ // to bind the motions together:
27
+ // coordinate1 + ratio * coordinate2 = constant
28
+ // The ratio can be negative or positive. If one joint is a revolute joint
29
+ // and the other joint is a prismatic joint, then the ratio will have units
30
+ // of length or units of 1/length.
31
+ //
32
+ // RESTRICITON: The revolute and prismatic joints must be attached to
33
+ // a fixed body (which must be body1 on those joints).
34
+
35
+ var b2GearJointDef = Class.create();
36
+ Object.extend(b2GearJointDef.prototype, b2JointDef.prototype);
37
+ Object.extend(b2GearJointDef.prototype,
38
+ {
39
+ initialize: function()
40
+ {
41
+ this.type = b2Joint.e_gearJoint;
42
+ this.joint1 = null;
43
+ this.joint2 = null;
44
+ this.ratio = 1.0;
45
+ },
46
+
47
+ joint1: null,
48
+ joint2: null,
49
+ ratio: null});
50
+
@@ -0,0 +1,49 @@
1
+ /*
2
+ * Copyright (c) 2006-2007 Erin Catto http:
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, and must not be
15
+ * misrepresented the original software.
16
+ * 3. This notice may not be removed or altered from any source distribution.
17
+ */
18
+
19
+
20
+
21
+
22
+
23
+ var b2Jacobian = Class.create();
24
+ b2Jacobian.prototype =
25
+ {
26
+ linear1: new b2Vec2(),
27
+ angular1: null,
28
+ linear2: new b2Vec2(),
29
+ angular2: null,
30
+
31
+ SetZero: function(){
32
+ this.linear1.SetZero(); this.angular1 = 0.0;
33
+ this.linear2.SetZero(); this.angular2 = 0.0;
34
+ },
35
+ Set: function(x1, a1, x2, a2){
36
+ this.linear1.SetV(x1); this.angular1 = a1;
37
+ this.linear2.SetV(x2); this.angular2 = a2;
38
+ },
39
+ Compute: function(x1, a1, x2, a2){
40
+
41
+ //return b2Math.b2Dot(this.linear1, x1) + this.angular1 * a1 + b2Math.b2Dot(this.linear2, x2) + this.angular2 * a2;
42
+ return (this.linear1.x*x1.x + this.linear1.y*x1.y) + this.angular1 * a1 + (this.linear2.x*x2.x + this.linear2.y*x2.y) + this.angular2 * a2;
43
+ },
44
+ initialize: function() {
45
+ // initialize instance variables for references
46
+ this.linear1 = new b2Vec2();
47
+ this.linear2 = new b2Vec2();
48
+ //
49
+ }};