मेरे 2 डी भौतिकी इंजन में, मैं एएबीबी बनाम एएबीबी टक्करों का पता लगा सकता हूं, और उन्हें सबसे कम पैठ वाले वेक्टर को खोजने और एएबीबी की स्थिति में जोड़कर हल कर सकता हूं।
ऐसा करने से दूसरा AABB के बाहर पहला AABB "धक्का" देता है, लेकिन वेग / त्वरण परिवर्तन से बिल्कुल भी नहीं निपटता है।
यदि मैं अपने सिमुलेशन में गुरुत्वाकर्षण त्वरण को जोड़ता हूं, तो पहले गतिशील एएबीबी का वेग तब भी बढ़ता रहता है जब यह दूसरे स्थिर एएबीबी के शीर्ष पर आराम कर रहा होता है। आखिरकार, वेग बहुत बड़ा हो जाएगा और टकराव का पता नहीं चलेगा (गतिशील AABB स्थैतिक के माध्यम से गिर जाएगा)।
मैंने संकल्प के बाद वेग को शून्य पर सेट करने की कोशिश की, लेकिन यह स्पष्ट रूप से अच्छी तरह से काम नहीं करता था, और अवास्तविक सिमुलेशन बनाता था।
मैंने ऑनलाइन पढ़ा कि स्थिति या वेग पर मैन्युअल रूप से काम करके टकरावों को हल करना सही नहीं है। मैंने बलों को लागू करने की कोशिश की (अब के लिए द्रव्यमान एक "हार्डकोड" है):
void Body::applyForce(sf::Vector2f mForce) { acceleration += mForce; }
void Body::integrate(float mFrameTime)
{
velocity += acceleration * mFrameTime;
position += velocity * mFrameTime;
acceleration = {0, 0};
}
यदि मैं टक्कर रिज़ॉल्यूशन के दौरान एक बल के रूप में सबसे छोटी पैठ वेक्टर लागू करता हूं, तो गतिशील एएबीबी को स्थिर से "धक्का दिया" मिलेगा, लेकिन गुरुत्वाकर्षण के बिना सिमुलेशन में इसका वेग कभी भी कम नहीं होगा और यह हमेशा आगे बढ़ता रहेगा।
क्या "अस्थायी" बल लागू करने का कोई तरीका है? एक ऐसा बल जो पहले AABB को दूसरे AABB से बाहर धकेलने से संबंधित है, फिर AABB से टकराने पर नहीं रुकता है?
संपूर्ण स्रोत कोड यहां उपलब्ध है: https://github.com/SuperV1234/SSVSCollision