উত্তর:
যদি আপনি দেয়ালের স্বাভাবিক ভেক্টরটি জানেন এবং অবজেক্টটির জন্য আগত দিক রয়েছে তবে আপনি যা চান তা হ'ল সমতল জুড়ে ভেক্টরের প্রতিচ্ছবি ।
তাহলে এন একটি সাধারণ ভেক্টর, এবং V হয় ইনকামিং দিক, তাহলে কি আপনি চান যে - (2 ( এন · বনাম ) এন - বনাম )। বিয়োগ চিহ্নটি হ'ল এই বিষয়টিটির জন্য যে প্রতিচ্ছবি সূত্রটি আসলে দিকটি বিপরীত করে না, কারণ কোনও বস্তুর গতি বিপরীত হবে for
এই উত্তরটি ভেক্টর গণিতের ক্ষেত্রে দেওয়া হয়েছে, একটি কোণ নয়, কারণ আপনার কাছে একটি কোণ ব্যবহার করার স্পষ্ট কারণ না থাকলে সাধারণত এটিই পছন্দনীয়। মনে রাখবেন যে আপনার যদি অবশ্যই কোণগুলির বিষয়ে কথা বলতে হয় তবে প্রতিবিম্বের কোণটি ঘটনার কোণের সমান। যদি কোণটি সাধারণ থেকে পরিমাপ করা হয় তবে বহির্গামী কোণটি আগত কোণটির প্রত্যাখ্যান; যদি কোণটি প্রাচীর থেকে পরিমাপ করা হয় তবে তা আগত কোণের পরিপূরক।
এটি 2 ডি বা 3 ডি গেম কিনা তা আপনি নির্দিষ্ট করেন নি। তবে এটি যদি 2 ডি গেম হয় এবং আপনার দেয়ালগুলি অনুভূমিক বা উল্লম্ব হওয়ার গ্যারান্টিযুক্ত এবং আপনি কেবল সেগুলি বন্ধ করে দিতে চান, প্রতিচ্ছবিগুলি মোকাবেলা করার চেয়ে আরও সহজ উপায়।
উল্লম্ব দেয়ালটি আঘাত করার সময় অবজেক্টের বেগের X- উপাদানটিকে বা আনুভূমিক প্রাচীরের সাথে আঘাত করার সময় অবজেক্টের গতির ওয়াই-উপাদানকে কেবল অস্বীকার করুন। উদাহরণ:
if( /* hit vertical wall */ )
{
object.velocity.x *= -1;
}
if( /* hit horizontal wall */ )
{
object.velocity.y *= -1;
}
তবে আপনি যদি সত্যই কোণটি জানার বিষয়ে চিন্তা করেন তবে সাধারণ পরিভাষায় প্রতিবিম্বের কোণটি ঘটনার কোণ হিসাবে একই। এই কোণটি প্রাচীরের স্বাভাবিকের সাথে পরিমাপ করা হয়। এখানে এমন একটি চিত্র যা এটি পরিষ্কার করে দেওয়া উচিত:
আপনার যদি কখনও স্বেচ্ছাসেবী দেয়ালগুলির জন্য এটি পরিচালনা করতে হয় তবে আপনাকে কীভাবে কোনও ভেক্টরকে প্রতিফলিত করতে হয় তা খতিয়ে দেখতে হবে। এটি সত্যিই কেবলমাত্র একটি ছোট সূত্র যা দেয়ালের স্বাভাবিক এবং ঘটনা ভেক্টর গ্রহণ করে এবং আপনার জন্য প্রতিফলিত ভেক্টরকে ফিরিয়ে দেয়। এক্সএনএ সূত্রটি ব্যবহার করে:
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
সঠিক নয়। উত্তরের দ্বিতীয় অংশটি সঠিক বাস্তবায়নকে চিহ্নিত করে। আইএমএইচও, অংশগুলির ক্রমটি বিপরীত হওয়া উচিত, সাধারণ সমাধানটি প্রথমে এবং এনফেসিসে উপস্থাপন করা উচিত, যখন ডান-কোণ সমাধানটি ব্যতিক্রমী ক্ষেত্রে সরলকরণ হিসাবে উপস্থাপিত হয়।
এটি কেবল দেয়ালগুলির সাথে সাধারণ ভেক্টর বরাবর কোনও ভেক্টর প্রতিফলিত করার বিষয়ে।