Apa sajakah metode untuk mewakili trek kereta api?

21

Saya melihat ke belakang beberapa saat lalu untuk sebuah proyek kecil, tetapi tidak terlalu jauh. Saya ingin membuat program kecil yang memungkinkan pengguna menggambar trek kereta api dan kemudian memungkinkan "kereta api" untuk mengikuti kata trek di pesawat 2D. Saya ingin trek menjadi bentuk yang cukup bebas dan menghasilkan garis halus yang bagus. Saya bermain-main dengan splines kubik dan memiliki hasil yang layak, tetapi memiliki banyak kesulitan mendapatkan kereta untuk mengikuti spline. Saya juga mengalami banyak kesulitan membuat banyak trek dan beralih kereta dari satu trek ke trek lainnya.

Adakah yang punya saran, artikel, atau kode sumber yang dapat membantu saya menemukan sesuatu? Terima kasih!

hokiecsgrad
sumber
3
Akan sangat membantu jika Anda menjelaskan masalah apa yang Anda temui.
Rachel Blum
1
Saya akan senang melihat demo permainan Anda.
ashes999

Jawaban:

10

Saat menggambar trek atau jalan, saya selalu ingin memulai dengan splines. Namun, terakhir kali saya berjuang dengan splines (seperti yang disebutkan oleh Rachel Blum , gerakan mulus pada spline adalah icky baik karena parameterisasi dan jarak), seseorang menyarankan kepada saya bahwa banyak jalan nyata menggunakan busur lingkaran, bukan splines. Lengkungan konstan membuatnya mudah untuk menghitung jarak dan bergerak dengan kecepatan konstan di sepanjang mereka. Plus, mereka terlihat bagus.

Saya mulai bermain dengan jalan yang berganti-ganti antara busur lingkaran dan garis lurus. Ini mirip dengan pendekatan Will tetapi busur lingkaran memiliki jari-jari variabel. Saya cukup senang dengan pendekatan ini tetapi akhirnya tidak melakukan apa-apa dengan itu. Coba demo ini (Flash): kontrol di sebelah kiri adalah untuk splines dan kontrol di sebelah kanan adalah untuk busur melingkar (gunakan slider untuk mengontrol panjang dan pegangan seret untuk mengontrol sudut). Buat kurva yang sangat ketat dengan menyeret ujung jalan untuk melihat seberapa bagus busur lingkaran itu.

Atau, jika Anda ingin bermain dengan kisi-kisi (disarankan oleh Iain ), cobalah menggambar dari ujung ke ujung alih-alih dari kotak ke kotak. Ini demo (Java applet).

amitp
sumber
7

Menggunakan splines hermite yang tepat dapat mengarah ke sudut yang sempit dan terlihat agak tidak seperti lintasan kereta:

menggunakan splines hermite

Saya mendapatkan hasil yang jauh lebih menyenangkan dari memperlakukan jalur sebagai garis lurus yang bergabung dengan lingkaran pada sambungan:

masukkan deskripsi gambar di sini

Triknya adalah menghitung garis singgung dalam dan luar dari lingkaran sendi yang berdekatan dan menghitung lekukan masing-masing sendi sehingga Anda lewat di sisi kanannya.

Dan, dalam logika lintasan, hindari persimpangan-sendiri jalur atau ubah menjadi persimpangan :)

Berikut video menggunakan pendekatan ini: http://www.youtube.com/watch?v=PAVksn4btKU

Akan
sumber
6

Anda bisa mencoba membiarkan pengguna menulis trek menggunakan Cornu spiral . Anda akan menemukan literatur yang hampir tidak ada tentangnya secara online, karena splines adalah cara de facto untuk mewakili kurva dalam perangkat lunak. Meskipun demikian, mereka adalah bagaimana jalur kereta api sebenarnya dilalui. Raph Levien telah melakukan banyak pekerjaan mempopulerkan mereka .

banyak sekali
sumber
2

Anda bisa mencoba pendekatan berbasis kotak di mana setiap kotak dapat terhubung ke satu atau lebih kotak lainnya. Anda kemudian dapat memiliki beberapa potongan yang menutupi beberapa kotak, untuk membuat beberapa kurva lebih halus. Pada dasarnya modular, seperti set kereta.

Iain
sumber
1
Saya mencoba sesuatu yang mirip dengan pendekatan berbasis grid. Saya pada dasarnya membuat lagu sehingga Anda bisa mengkliknya bersama-sama dengan cara memberikan sedikit lebih banyak kebebasan daripada kisi-kisi sederhana. Konsep yang sangat mirip, saya pikir. Berhasil, tetapi menggambar trek dengan memilih bagian yang sesuai setiap kali jenis tersedot.
hokiecsgrad
2

Saya mencoba berbagai teknik untuk menerapkan jalur kereta api, dan saya menemukan bahwa bagian lingkaran dan garis lurus memberikan hasil terbaik, dan matematika termudah untuk menjalankan kereta.

Sayangnya, itu juga membuat peletakan trek cukup rumit dan tidak terlalu intuitif, karena gerakan kecil dari titik kontrol akan mengirim trek ke arah yang sama sekali berbeda.

Matematika untuk memutuskan cara meletakkan trek menjadi sangat rumit, seperti halnya menambahkan lebih banyak titik kontrol.

Saya punya demo singkat di http://www.dailymotion.com/video/xgl2kp_openrailz-tech-demo-3_videogames .

small_duck
sumber
-1

Mungkin ini akan berguna:
Mengarahkan Perilaku Untuk Karakter Autonomous: http://www.red3d.com/cwr/steer/

Gregory
sumber
bukankah kereta tawanan ke trek mereka?
Will
@ Will: ada subbagian (yang belum saya baca) tentang path berikut red3d.com/cwr/steer/PathFollow.html
o0 '.
ya tapi kereta api di trek hanya bisa mengubah kecepatan. Jalurnya ditentukan oleh trek?
Will