टकराव पहचान एल्गोरिद्म
टकराव पहचान
- वीडियो गेम प्रोग्रामिंग में टकराव पहचान एक बहुत ही आम समस्या है
- यह इस बात के लिए आवश्यक है कि कैरेक्टर एक-दूसरे के आर-पार न जा सकें, या physics engine लागू किया जा सके
सरल तरीका 🐥
परफ़ॉर्मेंस समस्या
- objects की संख्या बढ़ने पर परफ़ॉर्मेंस समस्या आने लगती है
- उदाहरण के लिए, n = 20 होने पर 190 pairs की जाँच करनी पड़ती है
समाधान में सुधार
सॉर्टिंग के ज़रिए optimization
- objects को x coordinate के अनुसार sort करने पर अनावश्यक जाँच कम की जा सकती है
- कोड उदाहरण:
sortByLeft(balls);
for (let i = 0; i < balls.length; i++) {
const ball1 = balls[i];
for (let j = i + 1; j < balls.length; j++) {
const ball2 = balls[j];
if (ball2.left > ball1.right) break;
if (intersects(ball1, ball2)) {
bounce(ball1, ball2);
}
}
}
परफ़ॉर्मेंस विश्लेषण
- sorting: O(n log n)
- inner loop: औसतन O(n + m) (m x-axis पर overlap की कुल संख्या है)
- अंतिम time complexity: O(n log n + m)
दृश्य तुलना
- global pair checking और sorted pair checking की तुलना
- sorted pair checking में काफ़ी कम जाँच होती है
GN⁺ का सार
- यह लेख गेम डेवलपमेंट में टकराव पहचान एल्गोरिद्म को optimize करने के तरीकों पर है
- यह सरल O(n^2) एल्गोरिद्म से शुरू होकर sorting के ज़रिए परफ़ॉर्मेंस को काफ़ी बेहतर बनाता है
- यह गेम डेवलपर्स या software engineers के लिए बहुत उपयोगी जानकारी है
- समान फ़ंक्शनैलिटी वाले अन्य प्रोजेक्ट्स में Box2D, Bullet Physics आदि शामिल हैं
1 टिप्पणियां
Hacker News टिप्पणियाँ
लेखक ने सर्वोत्तम प्रदर्शन के लिए mergesort या quicksort जैसे "तेज़" sorting algorithms इस्तेमाल करने का सुझाव दिया है
पहले इसी तरह का काम किया था, लेकिन sorting की जगह हर दिशा के लिए index lists maintain की थीं
objectIndicesSortedByLeftEdge/RightEdge/TopEdge/BottomEdgeजैसी 4 lists होती हैंयह लेख सच में बहुत अच्छी तरह व्यवस्थित है
continuous collision detection पर दस्तावेज़ पढ़ना हमेशा पसंद रहा है
illustrations का इस्तेमाल अच्छा लगा
Part 2: https://leanrada.com/notes/sweep-and-prune-2/
"यह simple algorithm Big O terms में O(n^2) time में चलता है" इस दावे पर सवाल उठाया गया
जिज्ञासा थी कि क्या यह तरीका potential colliders को कम करने के लिए quad tree इस्तेमाल करने जैसा है
जिज्ञासा थी कि क्या कभी linear programming method प्रस्तावित की गई है
यह वेबसाइट मुझे अच्छे अर्थ में भटका गई