मैं एक गतिशील निकाय बनाने की कोशिश कर रहा हूं जो Box2D में एक स्थिर शरीर के चारों ओर कक्षाओं को बनाता है। मेरे पास शून्य-गुरुत्वाकर्षण दुनिया है, और DistanceJoint
जो दो निकायों को जोड़ती है। मैंने सभी घर्षण और निकायों को निकायों और जोड़ों से हटा दिया है, और गतिशील शरीर को प्रारंभिक रैखिक वेग लागू कर रहा हूं। नतीजा यह है कि शरीर कक्षा शुरू होता है, लेकिन इसकी गति समय के साथ कम हो जाती है - जिसे मैं शून्य गुरुत्वाकर्षण वातावरण में घर्षण के बिना उम्मीद नहीं करता हूं।शून्य गुरुत्वाकर्षण बॉक्स 2 डी दुनिया में कम गति
मैं कुछ गलत कर रहा हूं? क्या प्रत्येक चरण में रैखिक वेग को फिर से बनाया जाना चाहिए, या क्या मैं इस काम को Box2D पर सौंप सकता हूं?
// positions of both bodies
Vector2 planetPosition = new Vector2(x1/Physics.RATIO, y1/Physics.RATIO);
Vector2 satellitePosition = new Vector2(x2/Physics.RATIO, y2/Physics.RATIO);
// creating static body
BodyDef planetBodyDef = new BodyDef();
planetBodyDef.type = BodyType.StaticBody;
planetBodyDef.position.set(planetPosition);
planetBodyDef.angularDamping = 0;
planetBodyDef.linearDamping = 0;
planetBody = _world.createBody(planetBodyDef);
CircleShape planetShapeDef = new CircleShape();
planetShapeDef.setRadius(40);
FixtureDef planetFixtureDef = new FixtureDef();
planetFixtureDef.shape = planetShapeDef;
planetFixtureDef.density = 0.7f;
planetFixtureDef.friction = 0;
planetBody.createFixture(planetFixtureDef);
// creating dynamic body
BodyDef satelliteBodyDef = new BodyDef();
satelliteBodyDef.type = BodyType.DynamicBody;
satelliteBodyDef.position.set(satellitePosition);
satelliteBodyDef.linearDamping = 0;
satelliteBodyDef.angularDamping = 0;
satelliteBody = _world.createBody(satelliteBodyDef);
CircleShape satelliteShapeDef = new CircleShape();
satelliteShapeDef.setRadius(10);
FixtureDef satelliteFixtureDef = new FixtureDef();
satelliteFixtureDef.shape = satelliteShapeDef;
satelliteFixtureDef.density = 0.7f;
satelliteFixtureDef.friction = 0;
satelliteBody.createFixture(satelliteFixtureDef);
// create DistanceJoint between bodies
DistanceJointDef jointDef = new DistanceJointDef();
jointDef.initialize(satelliteBody, planetBody, satellitePosition, planetPosition);
jointDef.collideConnected = false;
jointDef.dampingRatio = 0;
_world.createJoint(jointDef);
// set initial velocity
satelliteBody.setLinearVelocity(new Vector2(0, 30.0f)); // orthogonal to the joint
स्पष्टीकरण के लिए धन्यवाद! यह वास्तव में समझ में आता है, जब कोई कंप्यूटर विज्ञान के संदर्भ में इसके बारे में सोचता है, सभी गोल त्रुटियों के साथ ... मुझे लगता है कि मैं बस शुद्ध भौतिकी की उम्मीद कर रहा था :) –