मैं एक मुक्त गिरावट और जमीन के साथ टकराव अनुकरण करना चाहता हूं (उदाहरण के लिए एक बाउंसिंग बॉल)। वस्तु एक वैक्यूम में गिर जाएगी - एक हवा प्रतिरोध छोड़ा जा सकता है। जमीन के साथ टक्कर से कुछ ऊर्जा हानि होनी चाहिए ताकि अंत में वस्तु आगे बढ़ना बंद कर दे। मैं जॉयएल का उपयोग उस बिंदु को प्रस्तुत करने के लिए करता हूं जो मेरी गिरती वस्तु है। एक गुरुत्वाकर्षण स्थिर है (-9.8 मीटर/एस^2)।गुरुत्वाकर्षण सिमुलेशन
deltaTime = currentTime - previousTime;
vel += acc * deltaTime;
pos += vel * deltaTime;
लेकिन मैं कर रहा हूँ कुछ गलत:
मैं बिंदु की एक नई स्थिति की गणना करने के लिए एक यूलर विधि पाया। बिंदु कुछ बार उछालता है और फिर यह नीचे जा रहा है (बहुत धीमी)।
display()
{
calculateDeltaTime();
velocity.y += gravity * deltaTime;
pos.y += velocity.y * deltaTime;
if(pos.y < -2.0f) //a collision with the ground
{
velocity.y = velocity.y * energyLoss * -1.0f;
}
}
:
यहाँ एक स्यूडोकोड (प्रारंभिक स्थिति = (0.0f, 2.0f, 0.0f), प्रारंभिक वेल (0.0f, 0.0f, 0.0f), गुरुत्वाकर्षण = -9.8f) है यथार्थवादी प्रभाव प्राप्त करने का सबसे अच्छा तरीका क्या है? यूलर विधि निरंतर त्वरण समीकरणों का संदर्भ कैसे देती है?
क्या होता है यदि आप केवल समीकरण से ऊर्जा हानि लेते हैं? – redbmk
योचई के उत्तर के अलावा, आप क्लिपिंग त्रुटियों से बचने के लिए अपने टक्कर के मामले में 'pos.y' को ग्राउंड लेवल पर सेट करने पर विचार कर सकते हैं –
ऊर्जा हानि के बिना बिंदु कुछ समय के बाद भी उछाल बंद कर देता है और यह बहुत धीमा हो रहा है। – Vert