Bagaimana cara membuat kendaraan bergerak ke suatu titik dan berhenti tanpa overshooting atau berosilasi?

9

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.

Iain
sumber

Jawaban:

4

Perilaku Mengarah Untuk Karakter Otonom . Lihat pencarian dan kedatangan.

Peredam
sumber
1
Bagus untuk kapal atau ruang angkasa, tetapi untuk menerapkannya pada fisika kendaraan Anda harus menafsirkan vektor yang dihasilkan, dan Anda kembali ke masalah aslinya lagi.
tenpn
3

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 ...

Kylotan
sumber
2
finalPositionDelta = -0.5 * sqr(currentSpeed) / maximumDecelerationNamun 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)
tenpn
Ya, metode ini masih berguna bahkan jika Anda membingkainya sebagai masalah sistem kontrol, karena memahami gradien yang terlibat harus membantu menghindari ketidakstabilan atau osilasi dalam pengukuran kesalahan.
Kylotan
1

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?

ADB
sumber
2
Saya tidak khawatir tentang mengambil jalan pintas jika itu tidak terlihat oleh pemain, tetapi jika sebuah kendaraan bisa berhenti mati di tempat itu akan terlihat sangat aneh.
Iain
1
Itu memang benar, namun itu membantu untuk berhenti tepat pada titik yang Anda inginkan setelah deklarasi, sehingga menghindari perhitungan yang rumit dan memiliki membagi langkah waktu Anda terlalu banyak.
ADB