Ok jadi anggap kita memiliki kendaraan seperti yang saya jelaskan dalam jawaban saya untuk pertanyaan ini , dengan posisi 2D, kecepatan, kecepatan sudut, dan seret / gesekan. Itu dapat mempercepat dan memecah dengan jumlah variabel, tetapi tidak berhenti mati secara instan atau mencapai kecepatan tertinggi secara instan. Bagaimana saya bisa membuatnya bergerak ke titik tertentu dan berhenti - dalam waktu secepat mungkin - tanpa overshooting atau berosilasi?
Saya sedang memikirkan sesuatu seperti:
- berbalik menuju posisi target.
- mempercepat
- lihat 1 tick depan, bertanya "Jika saya menerapkan break tick berikutnya, akankah saya melampaui target?"
- Jika itu akan melampaui batas, terapkan istirahat sekarang dengan jumlah tertentu.
Saya yakin ini adalah masalah yang diselesaikan dan mungkin ada metode yang lebih baik daripada yang saya jelaskan.
Menggunakan kalkulus, jika Anda mengetahui kecepatan dan laju perlambatan maksimum Anda, maka Anda bisa mengetahui jarak henti minimum Anda. Dengan mengingat hal itu, Anda dapat mengetahui dengan tepat kapan Anda perlu menerapkan rem (mengesampingkan / kesalahan quantisation) untuk berhenti pada titik tertentu.
Sekarang, semoga seseorang yang lebih baik dalam matematika daripada saya akan memposting rumus yang sebenarnya ...
sumber
finalPositionDelta = -0.5 * sqr(currentSpeed) / maximumDeceleration
Namun ini mengasumsikan bahwa perlambatan Anda adalah konstan, yang tergantung pada kedalaman simulasi Anda mungkin tidak demikian. Saya akan pergi dengan solusi Ranieri. (ups maaf ini deselerasi DIV, bukan mul)Ini masalah kontrol. Anda perlu memvariasikan input Anda secara proporsional ke semacam "kesalahan" ukuran, seperti jarak ke target. Lihat juga jawaban untuk pertanyaan ini.
Pelacakan Target: Kapan mempercepat dan memperlambat menara putar?
sumber
Terkadang, dalam pengembangan game, Anda perlu mengambil jalan pintas. Jalan pintas di sini disebut Impuls, yang, secara fisik adalah kekuatan yang sangat besar yang diterapkan dalam waktu yang sangat singkat. Alih-alih mengintegrasikannya dari waktu ke waktu, Anda hanya menerapkannya ke parameter sebagai perubahan langsung: atur kecepatan ke 0.
Pertanyaannya adalah: apakah Anda ingin menggunakan pintasan atau tidak?
sumber