Zainspirowany tym przykładem użycia d3js , wzywam cię do stworzenia kanwy (lub twojego odpowiednika języka), w którym będą wyświetlane ślady wskaźnika myszy , z następującymi zmianami:
Twist
Nie powinieneś wyświetlać śladów miejsca, w którym znajdował się wskaźnik myszy , ale „śladów” tego, gdzie będzie (mógł) być w przyszłości.
Możesz to zrobić za pomocą:
Wehikuł czasu lub
Szacunki probabilistyczne na podstawie poprzednich ruchów myszy
Założenia
W przypadku, gdy nie wybrałeś implementacji wehikułu czasu, gdy mysz nie porusza się dłużej niż przez milisekundy progowe , nie możesz wyświetlić żadnego śladu. (Wartość progowa zależy od ciebie).
Obraz kursora zależy od Ciebie i nie musi być taki sam jak kursor systemu operacyjnego (możesz nawet narysować zwykłe małe kółka lub kropki).
Nie będzie testowany żaden zły wkład: możesz założyć, że ruchy są płynne. „Gładka” definicja w tym przypadku brzmi: gdyby ruchy myszy były funkcją na osi xiy płótna - byłaby to funkcja ciągła.
Zwycięski
Wygra poprawna odpowiedź z najmniejszą liczbą znaków w kodzie. W przypadku remisu wygra ten, który został ogłoszony jako pierwszy.
EDYCJA: Prawidłowa odpowiedź z największą liczbą głosów zwycięży. W przypadku remisu wygra ten, który został ogłoszony jako pierwszy. Możesz być kreatywny przy implementacji lub być precyzyjny z przewidywaniami. Nie jestem już sędzią, wszyscy jesteśmy :)
- Prawidłowa odpowiedź musi zawierać sposób, w jaki mogę się bawić (test! Miałem na myśli test), albo w narzędziu online, albo w darmowym kompilatorze / tłumaczu / środowisku uruchomieniowym / itp.
źródło
Odpowiedzi:
JavaScript
Mój program przewiduje kierunek wskaźnika za pomocą średniej zmiany kątowej w kierunku ostatnich 20 ruchów myszy. Wykorzystuje również wariancję zmiany kątowej, aby utworzyć „chmurę” możliwych lokalizacji i kierunków wskaźnika. Kolor każdego wskaźnika w „chmurze” ma reprezentować prawdopodobieństwo, że jest to nowa pozycja wskaźnika myszy, w której ciemniejsze kolory oznaczają większe prawdopodobieństwo. Odległość chmury wskaźnika przed myszą obliczana jest na podstawie prędkości ruchu myszy. Nie robi najlepszych prognoz, ale wygląda ładnie.
Oto skrzypce: http://jsfiddle.net/5hs64t7w/4/
Zwiększenie rozmiaru chmury wskaźnika jest interesujące. Można to ustawić, zmieniając
cloudSize
zmienną w pierwszym wierszu programu. Oto skrzypce o rozmiarze chmury 10: http://jsfiddle.net/5hs64t7w/5/Użyłem tych źródeł, aby uzyskać wzory na średnią i wariancję kołową:
Środek kołowy: http://en.wikipedia.org/wiki/Circular_mean
Okólnik wariancji: http://www.ebi.ac.uk/thornton-srv/software/ PROCHECK / nmr_manual / man_cv.html
Oto kod, jeśli ktoś jest zainteresowany:
źródło
Jawa
Zdecydowałem się na podejście oparte na maszynie czasu. Okazuje się, że kluczowym składnikiem wehikułu czasu jest java.awt.Robot. Mój program pozwala poruszać myszą przez 10 sekund. Po 10 sekundach cofa się w czasie i odtwarza ruch myszy, jednocześnie doskonale ją przewidując.
Oto kod:
źródło
Waniliowy Javascript
Aby rozpocząć, oto prosta prognoza oparta na dwóch wartościach. Ostatnie
n
pozycje myszy są zapamiętywane i przechowywane w kolejce, przewidywanie to prosta liniowa ekstrapolacja pierwszego i ostatniego elementu w kolejce.To tylko kod prognozy, pełny kod wraz z wersją demonstracyjną można zobaczyć w this fiddle:
Demo zawiera komentarz w prognozie, który pozwala zamiast tego użyć dwóch ostatnich elementów w kolejce do prognozy. Sprawia, że wynik jest bardziej „w czasie rzeczywistym”, ale także mniej „płynny”.
Jeśli ktoś chce użyć boilerplate workdo implementacji innego algorytmu predykcji, nie krępuj się. To i tak nie jest dużo pracy.
źródło
JavaScript
Przeszłość jest najlepszą prognozą na przyszłość - ja i prawdopodobnie także ktoś inny
Moje rozwiązanie jest bardzo proste. Po pierwsze, oto >>> skrzypce! <<<
Wszystko, co robi, to przesuwanie przeszłego szlaku, więc wygląda jak szlak przyszłości. Zasadniczo nie jest zaangażowana matematyka (wiem, dość nudna). Możesz łatwo zobaczyć błędy, szczególnie podczas przesuwania kursora w kółko. Dlatego tak krótko skróciłem szlak;)
Kod:
źródło