जवाबों:
यदि आप दीवार के सामान्य वेक्टर को जानते हैं और ऑब्जेक्ट के लिए एक आने वाली दिशा है, तो आप जो चाहते हैं वह एक विमान में वेक्टर का प्रतिबिंब है ।
यदि n एक सामान्यीकृत वेक्टर है, और वी है भेजे दिशा, तो क्या आप चाहते हैं है - (2 ( एन · v ) n - वी )। इस तथ्य के लिए माइनस साइन होता है कि प्रतिबिंब सूत्र वास्तव में दिशा को उल्टा नहीं करता है, क्योंकि ऑब्जेक्ट का वेग उल्टा होगा।
यह उत्तर वेक्टर गणित के संदर्भ में दिया गया है, न कि किसी कोण से, क्योंकि यह आमतौर पर बेहतर होता है यदि आपके पास कोण का उपयोग करने का कोई स्पष्ट कारण नहीं है। ध्यान दें कि यदि आपको कोणों के बारे में बात करनी है, तो प्रतिबिंब का कोण घटना के कोण के बराबर है। यदि कोण सामान्य से मापा जाता है, तो आउटगोइंग कोण आने वाले कोण का निषेध है; यदि कोण को दीवार से मापा जाता है, तो यह आने वाले कोण का पूरक है।
यदि यह एक 2D या 3D गेम था, तो आपने निर्दिष्ट नहीं किया। लेकिन अगर यह 2 डी गेम है और आपकी दीवारों को क्षैतिज या ऊर्ध्वाधर होने की गारंटी है और आप बस उनसे वस्तु को उछालना चाहते हैं, तो प्रतिबिंबों से निपटने की तुलना में बहुत आसान तरीका है।
किसी ऊर्ध्वाधर दीवार से टकराते समय, या क्षैतिज दीवार से टकराते समय वस्तु के वेग के Y- घटक से वस्तु के वेग के X- घटक को नकारें। उदाहरण:
if( /* hit vertical wall */ )
{
object.velocity.x *= -1;
}
if( /* hit horizontal wall */ )
{
object.velocity.y *= -1;
}
लेकिन यदि आप वास्तव में कोण को जानने की परवाह करते हैं, तो सामान्य शब्दों में, प्रतिबिंब का कोण घटना के कोण के समान है। यह कोण दीवार की सामान्य के संबंध में मापा जाता है। यहाँ एक तस्वीर है जो इसे स्पष्ट करना चाहिए:
यदि आपको कभी भी मनमानी दीवारों के लिए इसे संभालने की आवश्यकता होती है, तो आपको एक वेक्टर को प्रतिबिंबित करने के तरीके पर ध्यान देना होगा। यह वास्तव में सिर्फ एक छोटा सूत्र है जो दीवार के सामान्य और घटना वेक्टर को लेता है, और आपके लिए प्रतिबिंबित वेक्टर लौटाता है। यहाँ सूत्र XNA का उपयोग करता है:
public static Vector3 Reflect(Vector3 vector, Vector3 normal)
{
return vector - 2 * Vector3.Dot(vector, normal) * normal;
}
और 2 डी के लिए आप बस कर सकते हैं:
public static Vector2 Reflect(Vector2 vector, Vector2 normal)
{
return vector - 2 * Vector2.Dot(vector, normal) * normal;
}
if it's a 2D game and your walls are guaranteed to be horizontal or vertical
सही नहीं है। उत्तर का दूसरा भाग सही कार्यान्वयन को मानता है। IMHO, भागों के क्रम को उलट दिया जाना चाहिए, सामान्य समाधान को पहले और एन्फैसिस में प्रस्तुत करना, जबकि समकोण समाधान को असाधारण मामले के लिए सरलीकरण के रूप में प्रस्तुत किया गया है।
यह सामान्य वेक्टर की दीवारों के साथ एक वेक्टर को प्रतिबिंबित करने के बारे में है।