bd3.type = BodyType.DYNAMIC;
bd3.position.set(10.0f, 6.0f);
Body body3 = m_world.createBody(bd3);
body3.createFixture(circle2, 5.0f);
RevoluteJointDef jd1 = new RevoluteJointDef();
jd1.initialize(body2, body1, bd1.position);
Joint joint1 = m_world.createJoint(jd1);
RevoluteJointDef jd2 = new RevoluteJointDef();
jd2.initialize(body2, body3, bd3.position);
Joint joint2 = m_world.createJoint(jd2);
GearJointDef jd4 = new GearJointDef();
jd4.bodyA = body1;
jd4.bodyB = body3;
jd4.joint1 = joint1;
jd4.joint2 = joint2;
jd4.ratio = circle2.m_radius / circle1.m_radius;
m_world.createJoint(jd4);
}
{
CircleShape circle1 = new CircleShape();
circle1.m_radius = 1.0f;
CircleShape circle2 = new CircleShape();
circle2.m_radius = 2.0f;
PolygonShape box = new PolygonShape();
box.setAsBox(0.5f, 5.0f);
BodyDef bd1 = new BodyDef();
bd1.type = BodyType.DYNAMIC;
bd1.position.set(-3.0f, 12.0f);
Body body1 = m_world.createBody(bd1);
body1.createFixture(circle1, 5.0f);
RevoluteJointDef jd1 = new RevoluteJointDef();
jd1.bodyA = ground;
jd1.bodyB = body1;
ground.getLocalPointToOut(bd1.position, jd1.localAnchorA);
body1.getLocalPointToOut(bd1.position, jd1.localAnchorB);
jd1.referenceAngle = body1.getAngle() - ground.getAngle();
m_joint1 = (RevoluteJoint) m_world.createJoint(jd1);
BodyDef bd2 = new BodyDef();
bd2.type = BodyType.DYNAMIC;
bd2.position.set(0.0f, 12.0f);
Body body2 = m_world.createBody(bd2);
body2.createFixture(circle2, 5.0f);
RevoluteJointDef jd2 = new RevoluteJointDef();
jd2.initialize(ground, body2, bd2.position);
m_joint2 = (RevoluteJoint) m_world.createJoint(jd2);
BodyDef bd3 = new BodyDef();
bd3.type = BodyType.DYNAMIC;
bd3.position.set(2.5f, 12.0f);