ওয়াল সংঘর্ষের ফলাফল কোণ নির্ধারণ করুন


14

সুতরাং আমার কাছে একটি বস্তু স্থির অনুভূমিক বা উল্লম্ব প্রাচীরের দিকে একটি দিকে এগিয়ে চলেছে। অবজেক্টটি যেভাবে কোণে উঠতে হবে সেটিকে আমি কীভাবে গণনা করব? বস্তুটি একটি নির্বিচারে কোণে প্রাচীরের কাছে যেতে পারে।

উত্তর:


18

যদি আপনি দেয়ালের স্বাভাবিক ভেক্টরটি জানেন এবং অবজেক্টটির জন্য আগত দিক রয়েছে তবে আপনি যা চান তা হ'ল সমতল জুড়ে ভেক্টরের প্রতিচ্ছবি

তাহলে এন একটি সাধারণ ভেক্টর, এবং V হয় ইনকামিং দিক, তাহলে কি আপনি চান যে - (2 ( এন · বনাম ) এন - বনাম )। বিয়োগ চিহ্নটি হ'ল এই বিষয়টিটির জন্য যে প্রতিচ্ছবি সূত্রটি আসলে দিকটি বিপরীত করে না, কারণ কোনও বস্তুর গতি বিপরীত হবে for

এই উত্তরটি ভেক্টর গণিতের ক্ষেত্রে দেওয়া হয়েছে, একটি কোণ নয়, কারণ আপনার কাছে একটি কোণ ব্যবহার করার স্পষ্ট কারণ না থাকলে সাধারণত এটিই পছন্দনীয়। মনে রাখবেন যে আপনার যদি অবশ্যই কোণগুলির বিষয়ে কথা বলতে হয় তবে প্রতিবিম্বের কোণটি ঘটনার কোণের সমান। যদি কোণটি সাধারণ থেকে পরিমাপ করা হয় তবে বহির্গামী কোণটি আগত কোণটির প্রত্যাখ্যান; যদি কোণটি প্রাচীর থেকে পরিমাপ করা হয় তবে তা আগত কোণের পরিপূরক।


দুর্দান্ত ব্যাখ্যা। এটি আমার জন্য দুর্দান্ত কাজ করেছে! ধন্যবাদ!
DRIFTy

13

এটি 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;
}

এর জন্য দুঃখিত, এটি একটি 2 ডি গেম। আমি এটিকে কোণের ভিত্তিতে রাখতে চাই কারণ আপনি যেমন বলেছিলেন আমি কোনও প্রাচীর ব্যবহার করতে সক্ষম হতে চাই। ধন্যবাদ!
DRIFTy

আমি এটি 2D কভারও সম্পাদনা করেছি। আসলে, এটি একই, কেবলমাত্র 2 ডি ভেক্টর, একই ক্রিয়াকলাপ এবং সূত্রগুলি সহ
গুস্তাভো ম্যাকিয়েল

2 ডি গেমের একটি প্রাচীর কোণযুক্ত হতে পারে, সুতরাং বিবৃতিটি if it's a 2D game and your walls are guaranteed to be horizontal or verticalসঠিক নয়। উত্তরের দ্বিতীয় অংশটি সঠিক বাস্তবায়নকে চিহ্নিত করে। আইএমএইচও, অংশগুলির ক্রমটি বিপরীত হওয়া উচিত, সাধারণ সমাধানটি প্রথমে এবং এনফেসিসে উপস্থাপন করা উচিত, যখন ডান-কোণ সমাধানটি ব্যতিক্রমী ক্ষেত্রে সরলকরণ হিসাবে উপস্থাপিত হয়।
XenoRo

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.