Saya mengembangkan game di Flash dan saya butuh sedikit bantuan. Ini bisa dianggap sebagai masalah matematika.
Objek saya terbang dengan kecepatan X
dan objek saya bisa bertabrakan dengan batu. Ketika itu bertabrakan dengan batu, saya perlu objek saya untuk memecahkan batu dan melanjutkan, tetapi dengan kecepatan yang lebih sedikit. Sangat mudah untuk membuat hard-code dan menulis sesuatu seperti:, myVelocity -= 10;
tapi masalah utama saya adalah saya ingin kehilangan lebih sedikit kecepatan semakin tinggi kecepatan awalnya.
Sebagai contoh: Jika kecepatannya 300 saya ingin kehilangan 10 dan jika 200 saya ingin kehilangan 20.
Bisakah ini dilakukan dengan semacam formula?
mathematics
physics
Afra
sumber
sumber
log(myVelocity + 1) * N
?Jawaban:
Saya akan membalikkan kecepatan dan mengalikannya dengan sesuatu yang Anda sukai:
Contoh ini memberikan efek ini:
sumber
sistem yang Anda dan orang lain gambarkan tidak akan menghasilkan fisika yang tampak nyata. rumus utamanya adalah untuk mengurangi 0,5 * m * v ^ 2 (energi kinematik) dengan nilai konstan setiap kali benda mengenai suatu tempat.
jadi jika sebuah benda dengan berat 2Kg mencapai beberapa blok, yang membutuhkan energi 16j sebelum rusak: kecepatan gerakan objek akan berubah sesuai tabel ini:
sumber
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 :
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
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:
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.
sumber
Saya pikir, Anda dapat menggunakan pembagian sederhana dengan kecepatan. Misalnya: hilang = 3 000 / myVelocity. Ketika kecepatan 300, Anda akan kehilangan 10, ketika 200, Anda akan kehilangan 15. Terserah Anda untuk memilih konstanta yang benar.
Jika Anda mau, Anda bisa menggunakan rumus yang lebih kompleks, seperti: konstanta / (kecepatan konstan2 * ^ 2 + kecepatan konstan3 *). Sekali lagi - cukup pilih konstanta, yang cocok untuk Anda.
sumber