Terinspirasi oleh contoh ini menggunakan d3js , saya menantang Anda untuk membuat kanvas (atau bahasa pilihan Anda) di mana jejak penunjuk mouse akan ditampilkan, dengan twist berikut:
Twist
Anda tidak boleh menampilkan jejak di mana penunjuk tetikus itu berada , tetapi "jejak" di mana ia akan (mungkin) berada di masa depan.
Anda dapat melakukannya dengan menggunakan:
Mesin waktu, atau
Estimasi probabilitas berdasarkan pergerakan mouse sebelumnya
Asumsi
Jika Anda tidak memilih penerapan mesin waktu, saat mouse tidak bergerak lebih dari ambang milidetik, Anda tidak dapat menampilkan jejak apa pun. (Nilai ambang terserah Anda untuk memilih).
Gambar kursor terserah Anda dan tidak harus sama dengan kursor OS (Anda bahkan dapat menggambar lingkaran atau titik kecil sederhana).
Tidak ada input jahat yang akan diuji: Anda dapat menganggap gerakannya lancar. Definisi 'halus' untuk kasus ini adalah: jika gerakan mouse adalah fungsi di atas sumbu x dan y kanvas - itu akan menjadi fungsi kontinu.
Kemenangan
Jawaban yang valid dengan karakter paling sedikit dalam kode akan menang. Seandainya seri - yang dipasang pertama kali akan menang.
EDIT: Jawaban yang valid dengan sebagian besar upvotes akan menang. Seandainya seri - yang dipasang pertama kali akan menang. Anda bisa kreatif pada implementasi, atau tepat dengan prediksi. Saya bukan hakim lagi, kita semua :)
- Sebuah jawaban yang valid harus menyertakan cara bagi saya untuk bermain (test! Maksud saya test), baik pada alat online atau pada kompiler / interpreter / runtime / etc yang dapat didownload secara bebas.
sumber
Jawaban:
Javascript
Program saya memprediksi arah pointer dengan menggunakan rata-rata perubahan sudut dalam arah 20 gerakan mouse terakhir. Ini juga menggunakan varians dari perubahan sudut untuk membuat "cloud" dari kemungkinan lokasi dan arah penunjuk. Warna setiap pointer di "cloud" seharusnya mewakili kemungkinan itu menjadi posisi baru dari pointer mouse, di mana warna yang lebih gelap mewakili kemungkinan yang lebih besar. Jarak awan penunjuk di depan mouse dihitung menggunakan kecepatan gerakan mouse. Itu tidak membuat prediksi terbaik tetapi terlihat rapi.
Ini biola: http://jsfiddle.net/5hs64t7w/4/
Meningkatkan ukuran cloud penunjuk ini menarik untuk dilihat. Itu dapat diatur dengan mengubah
cloudSize
variabel pada baris pertama program. Berikut adalah biola dengan ukuran awan 10: http://jsfiddle.net/5hs64t7w/5/Saya menggunakan sumber-sumber ini untuk mendapatkan rumus untuk mean melingkar dan varians:
Circular Mean: http://en.wikipedia.org/wiki/Circular_mean
Circular Variance: http://www.ebi.ac.uk/thornton-srv/software/ PROCHECK / nmr_manual / man_cv.html
Ini kode jika ada yang tertarik:
sumber
Jawa
Saya memutuskan untuk mengambil pendekatan mesin waktu. Ternyata bahan utama dari mesin waktu adalah java.awt.Robot. Program saya memungkinkan Anda menggerakkan mouse Anda selama 10 detik. Setelah 10 detik, ia kembali ke masa lalu dan menciptakan kembali gerakan mouse Anda, sambil memperkirakannya dengan sempurna.
Ini kodenya:
sumber
Vanilla Javascript
Untuk memulainya, berikut adalah prediksi sederhana berdasarkan dua nilai. Posisi
n
mouse terakhir diingat dan disimpan dalam antrian, prediksinya adalah ekstrapolasi linear sederhana dari elemen pertama dan terakhir dalam antrian.Ini hanya kode prediksi, kode lengkap termasuk demo dapat dilihat di this fiddle:
Demo berisi komentar dalam prediksi yang memungkinkan Anda untuk menggunakan dua elemen terakhir dalam antrian untuk prediksi. Menjadikan hasilnya lebih "real-time", tetapi juga kurang "halus".
Jika ada yang ingin menggunakan boilerplate workuntuk menerapkan algoritma prediksi yang berbeda, silakan saja. Lagipula itu tidak banyak pekerjaan.
sumber
Javascript
Masa lalu adalah prediksi terbaik untuk masa depan - saya, dan mungkin juga orang lain
Solusi saya sangat sederhana. Pertama, ini dia >>> Fiddle! <<<
Yang dilakukannya hanyalah menggeser jejak masa lalu, jadi sepertinya jejak masa depan. Pada dasarnya tidak ada Matematika yang terlibat (Saya Tahu, sangat membosankan). Anda dapat dengan mudah melihat kesalahan, terutama saat memindahkan kursor dalam lingkaran. Itu sebabnya saya membuat jejak sangat singkat;)
Kode:
sumber