Anda belum benar-benar memberikan informasi yang cukup untuk mengetahui kisaran seperti apa yang Anda inginkan, yaitu apakah itu dibatasi, apakah Anda ingin perkembangan geometris, dll.
Hal pertama yang ingin Anda lakukan adalah mendapatkan angka yang proporsional dengan jumlah kecepatan yang ingin Anda hilangkan (tidak harus sama, tetapi harus menurun ketika kecepatan meningkat agar proporsional dengan kerugian Anda). Cara standar untuk melakukan itu adalah dengan menerima timbal balik :
temp = 1 / currentVelocity;
Sekarang, untuk 100 Anda akan memiliki 0,01, untuk 200 Anda akan memiliki 0,005, untuk 300 Anda akan memiliki 0,0033 dan seterusnya.
Sekarang Anda hanya perlu menyesuaikan nomor itu dengan apa pun yang Anda inginkan, dengan mengalikannya. Begitu
k = 3000;
newVelocity = temp * k;
akan memberi Anda 20 untuk 300, tetapi itu akan memberi Anda 15 untuk 200 daripada 10. Ini mungkin baik untuk Anda, dalam hal ini Anda tidak perlu membaca lebih lanjut. Anda dapat menyesuaikan k sesuka Anda tetapi Anda mungkin tidak mendapatkan angka dengan cara yang Anda sukai, kecuali jika Anda melakukan sedikit lagi, seperti menerapkan progresi geometris, atau mengubah dasar kenaikan. Saya tidak akan masuk ke perkembangan geometris di sini, tetapi jika Anda ingin mengubah basis, Anda melakukannya sebagai berikut:
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)
Ini akan memberi Anda rentang yang semula Anda tanyakan dalam pertanyaan Anda, 300 -> kehilangan 10, 200 -> kehilangan 20. FYI 100 -> kehilangan 40, dan 50 -> kehilangan 80 (!) Yang berarti Anda Anda harus membatasi pengurangan Anda - yang telah saya lakukan pada baris (1) dan (2).
Ada cara lain untuk mendekati seluruh masalah ini, tentu saja, yang saya yakin mereka yang lebih mahir secara matematis daripada saya, akan memposting di sini.
log(myVelocity + 1) * N
?