আপনি কোন ধরণের রেঞ্জ চান তা বলতে আসলেই আপনি পর্যাপ্ত তথ্য দেননি, যেমন এটি আবদ্ধ কিনা, আপনি জ্যামিতিক অগ্রগতি চান কিনা ইত্যাদি tell
প্রথম কাজটি আপনি করতে চান তা আপনি যে গতিটি হারাতে চান তার সাথে আনুপাতিক একটি সংখ্যা অর্জন করা (এটির মতো হবে না, তবে এটি আপনার ক্ষতির সাথে আনুপাতিক করতে গতি বাড়ার সাথে সাথে এটি হ্রাস করা উচিত)। এটি করার মানক উপায় হ'ল পরস্পর গ্রহণ করা :
temp = 1 / currentVelocity;
এখন, 100 এর জন্য আপনার 0.01 থাকবে, 200 এর জন্য আপনার 0.005 থাকবে, 300 এর জন্য আপনার কাছে 0.0033 থাকবে।
এখন আপনাকে কেবল সেই সংখ্যাটি গুণের মাধ্যমে সত্যই যা কিছু করতে চান তার সাথে সামঞ্জস্য করতে হবে। সুতরাং
k = 3000;
newVelocity = temp * k;
আপনাকে আপনার ২০ টি 300 এর বিনিময়ে দেবে, তবে এটি আপনাকে 10 এর পরিবর্তে 200 এর জন্য 15 দেবে This এটি আপনার পক্ষে উপযুক্ত হতে পারে, সেক্ষেত্রে আপনাকে আরও পড়ার দরকার নেই। আপনি নিজের পছন্দ অনুযায়ী কে সামঞ্জস্য করতে পারেন তবে আপনি যদি আরও কিছু না করেন যেমন আপনি জ্যামিতিক অগ্রগতি বাস্তবায়ন না করে বা বৃদ্ধির ভিত্তি পরিবর্তন না করেন তবে আপনি তাদের পছন্দ মতো সংখ্যাগুলি পেতে পারেন না। আমি এখানে জ্যামিতিক অগ্রগতিতে যাচ্ছি না, তবে আপনি যদি বেসটি পরিবর্তন করতে চান তবে আপনি এটি নীচে করুন:
base = 100;
temp = 1 / (currentVelocity - base);
if (temp < 0) temp = 0; //adjust temp so never less than zero, cannot gain force!
k = 2000;
velocityLoss= temp * k;
if (velocityLoss > currentVelocity) //(1) or make currentVelocity an unsigned int
velocityLoss = currentVelocity; //(2)
এটি আপনাকে আপনার প্রশ্নে মূলত যে পরিসরটি চেয়েছিল, সেই পরিমাণ সরবরাহ করবে, ২০০ -> 10, 200 -> লোকসান 20. এফওয়াইআই 100 -> 40 এর ক্ষতি এবং 50 -> 80 এর ক্ষতি (!) যার অর্থ আপনি আপনার বিয়োগফলকে সীমাবদ্ধ করা দরকার - এটি আমি লাইনগুলিতে (1) এবং (2) করেছি।
এই পুরো সমস্যাটির কাছে যাওয়ার অন্যান্য উপায় রয়েছে, অবশ্যই, আমি নিশ্চিত যে আমার চেয়ে গণিতগুলি আরও দক্ষ, তারা এখানে পোস্ট করবে।
log(myVelocity + 1) * N
?