সামনের চাকা শিরোনাম এবং বেগ থেকে বাইক শিরোনাম গণনা করুন


10

আমার কাছে একটি সহজ টপ ডাউন বাইক গেম রয়েছে যা আমি স্টিয়ারিং যুক্ত করার চেষ্টা করছি। আমি বাইকটির শিরোনাম এবং বেগ নির্ধারণ করতে কীভাবে সামনের চাকাটির শিরোনাম ব্যবহার করব তা জানতে চাই।

void Update () 
{
    //Get input from user Vertical: 0 to 1, Horizontal -1 to 1
    float forwardInput = Input.GetAxis("Vertical");
    float sidewaysInput = Input.GetAxis("Horizontal") * m_steeringAmount;

    // Turn front wheel
    m_frontWheelTransform.localEulerAngles = new Vector3(0, sidewaysInput, 90);

    // get speed and drag
    float   speed           = m_velocity.magnitude;
    Vector3 forwardDrag     = -m_forwardDragConstant * m_velocity * speed;

    // calculate acceleration 
    float engineForce       = forwardInput * m_enginePower;
    Vector3 forwardTraction = transform.forward * engineForce;
    Vector3 forwrdForce     = forwardTraction + forwardDrag;
    Vector3 acceleration    = forwrdForce / m_mass;

    // update velocity and position
    m_velocity += acceleration * Time.deltaTime;
    transform.localPosition += m_velocity * Time.deltaTime;
}

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

ম্যাডশোগো মন্তব্যের ভিত্তিতে সম্পাদনা করুন

এখানে চিত্র বর্ণনা লিখুন


আমি এই মুহুর্তে আমার ফোনে রয়েছি তাই আমি কেবল একটি সংক্ষিপ্ত উত্তর দেব: চাকাগুলি একটি কল্পিত বৃত্তের সাথে স্পর্শকাতর হয় যার সাথে বাইকটি যায় তাই বাইকটি ঘুরিয়ে দেয়। বৃত্তের কেন্দ্রটি প্রতিটি চক্রের অরথগোনাল রেখার ছেদে রয়েছে। চাকাগুলি যদি উভয় সরল থাকে (বাইকটি ঘুরিয়ে নিচ্ছে না) তবে এই রেখাগুলি অসীম দূরত্বে পথ অতিক্রম করে (তারা সমান্তরাল) ফলে অসীম ব্যাসার্ধের বৃত্ত, অর্থাৎ একটি রেখা তৈরি হয়। অবশেষে, এটি আপনাকে বাইকটি (বৃত্ত) বা তার বক্ররেখা অনুসরণ করতে হবে এমন ট্রাজেক্টোরি দেয় যা আপনার প্রয়োজন অনুসারে চলে।
jrsala

উত্তর ম্যাডশোগো জন্য ধন্যবাদ। আমি যুক্ত করা ডায়াগ্রামটি একবার দেখে নিতে পারি এবং তা সঠিক কিনা তা আমাকে জানাতে পারি। লাল রেখাটি বাইকের শিরোনাম। চিয়ার্স
ব্যবহারকারী 346443

ওহ অপেক্ষা করুন, সামনের চাকাটি আপনার অঙ্কনের বৃত্তের কাছে স্পর্শকাতর নয়। আমার মাথায়, উভয় চাকা স্পর্শকাতর ছিল। কিছু জিনিস পরিবর্তন।
jrsala

আপনি বাইক পদার্থবিজ্ঞানের উইকিপিডিয়া পৃষ্ঠাটি দেখেছেন ? এটিতে টার্ন ব্যাসার্ধের জন্য দরকারী সূত্র রয়েছে যা অ্যাকাউন্টে ঝুঁকে পড়ে।
সাম হোচেভার

উত্তর:


3

ঠিক আছে, আমি ফলাফল নিয়ে ফিরে এসেছি!

অ্যানিমেটেড বাইক

আমি দুটি পদ্ধতির চেষ্টা করেছি:

  • চাকাগুলির কেন্দ্রগুলির গতিবিধি নিয়ন্ত্রণকারী একটি ডিফারেনশিয়াল সমীকরণ অর্জনের জন্য সলিড মেকানিক্স ব্যবহার করে: সিস্টেম "বাইক" এর ইনপুটগুলি পিছনের চাকা এবং সামনের চক্রের কোণে টর্ক থাকে এবং ফলাফলগুলি কেন্দ্রগুলির গতিবিজ্ঞান হয় চাকার। তবে আমি হাল ছেড়ে দিয়েছি, এটা কঠিন!

  • জ্যামিতিক দৃষ্টিকোণ থেকে কী ঘটেছিল তা অনুমান করার চেষ্টা করার সময় যখন পিছনের চাকাটি সামনের চাকাটি সামনের দিকে না রেখে সামনের চাকাটিকে সামনে এগিয়ে "ধাক্কা দেয়"। এই পদ্ধতিটি সরাসরি অসীম বর্ধনের একটি সমীকরণ লাভ করে (নীচে দেখুন) যেখান থেকে আপনি একটি প্রকৃত ডিফারেনশিয়াল সমীকরণ পেতে পারেন। আমি এই প্রথম সমীকরণটি ওডিডি পাওয়ার জন্য হেরফের করার চেষ্টা করি নি তবে আমার অনুমান যে সলিড মেকানিক্স ব্যবহার করে আমি সেই একই ওডিইটি অর্জন করতে পারতাম। এটা ঠিক ঠিক বোধ।

স্বরলিপি এবং অনুমান:

আমরা বেসে ভেক্টর প্রাক্তন এবং ey সহ প্লেনে রয়েছি ।

A হ'ল পিছনের চাকাটির কেন্দ্রস্থল। বি সামনে চাকা কেন্দ্র। বাইকের এল এর দৈর্ঘ্য এবং বি এর মধ্যকার দূরত্ব । মধ্যবর্তী কোণ ey ও ভেক্টর এবি হয় φ । মধ্যবর্তী কোণ এবি এবং সামনের চাকা হয় θ

স্বজ্ঞাত যুক্তি:

আমরা অনুমান, একটি নির্দিষ্ট তাত্ক্ষণিক টি , এ (T) একটি বেগ হয়েছে ভী (টি) সঙ্গে colinear এবি । অতএব, একটি ক্ষুদ্রাতিক্ষুদ্র timestep জন্য DT ,

A (t + dt) = A (t) + V (t) .dt

আমরা যে অনুমান করা সময়ে, T , সামনের চাকা প্রপাত না অর্থাত গতি বি সামনের চাকা নির্দেশনায় colinear, অর্থাত্ একটি কোণের ফর্ম θ সঙ্গে এবি । আমরা কল একক ভেক্টর একটি কোণের বিরচন θ সঙ্গে এবি , সামনের চাকা হিসাবে একই নির্দেশনায় অর্থাত একক ভেক্টর।

অতএব, t + dt এ ,

বি (টি + ডিটি) = বি (টি) + λ.Uθ θ

একটি নির্দিষ্ট বাস্তবের জন্য, ধনাত্মক - যেমন বাইকের এল এর দৈর্ঘ্য সংরক্ষণ করা হয়:

দূরত্ব (A (t + dt), বি (টি + ডিটি) = এল

গণনাগুলি:

এই শেষ সমীকরণটি অনুবাদ করে

আদর্শ (B (t) + λ.Uθ - A (t) - V (t) .dt) = L²

কিন্তু বি (টি) , সংজ্ঞা অনুসারে, এ (টি) + এল.ইউ , যাতে λ অবশ্যই সমীকরণটি পূরণ করতে পারে

আদর্শ (L.Uφ + λ.Uθ - V (t) .dt) = L²

সমাধানটি অবশ্যই from থেকে স্বতন্ত্র φ যেহেতু বাইকটি ইতিবাচক y এর দিকে নির্দেশ করলে সমস্যাটি একই । অতএব, যদি আমরা কল আর কোণ সঙ্গে ঘূর্ণন ম্যাট্রিক্স , λ ইতিবাচক সমাধান হতে হবে

norm² (L.ey; λ.Uθ - আরভি (টি) .dt) = L²

কয়েক গণনার পরে, যদি আমরা কল বনাম আদর্শ ভী , আপনি পেতে

λ = এল

উপরের অ্যানিমেশনটি পাওয়ার জন্য সিউডোকোডটি এখানে রয়েছে ( ব্যবহারের পরিবর্তে আমি u = U (θ + φ) ব্যবহার করি কারণ এটি সহজ ছিল):

// I start at i=1 because i=0 contains the initial values
for (int i=1; i<=N; i++)
{
    // the array in which I stored the successive A points
    Aarray[i] = Aarray[i-1] + dt*V;
    float lambda = L*( sqrt(1 - (sin(theta)*(1-v*dt/L))**2) - cos(theta) )
                   + cos(theta)*v*dt;
    // the array in which I stored the successive B points
    Barray[i] = Barray[i-1] + lambda*u;
    // the AB vector normalized
    AiBiUnit = (Barray[i] - Aarray[i])/L;
    // Refreshing the velocity of A
    V = v*AiBiUnit;
    // Refreshing u.
    // u is indeed a unit vector separated from AiBiUnit by an angle theta,
    // so you get it by rotating the newly computed AiBiUnit by an angle
    // of +theta:
    u = AiBiUnit.rotate(theta);
}

যদি আপনি প্রচুর পুনরাবৃত্তি করেন এবং / বা স্টিয়ারিং এঙ্গেলটি বাড়ান তবে ট্রাজেক্টোরিটি একটি বৃত্ত, যা সুসংগত, আমি বিশ্বাস করি।

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