Inspiré par cet exemple d'utilisation de d3js , je vous mets au défi de créer un canevas (ou votre équivalent de langue de choix) dans lequel les traces du pointeur de la souris seront affichées, avec la torsion suivante:
La torsion
Vous ne devriez pas afficher les pistes de l' endroit où le pointeur de la souris était , mais les « pistes » de l' endroit où il va (peut) être à l' avenir.
Vous pouvez le faire en utilisant soit:
Une machine à voyager dans le temps, ou
Estimations probabilistes basées sur les mouvements précédents de la souris
Hypothèses
Si vous n'avez pas choisi la mise en œuvre de la machine à temps, lorsque la souris ne bouge pas pendant plus de seuil millisecondes, vous pouvez afficher aucun des sentiers. ( Vous pouvez choisir la valeur seuil ).
L'image du curseur dépend de vous et ne doit pas nécessairement être la même que celle du curseur du système d'exploitation (vous pouvez même dessiner de petits cercles ou points simples).
Aucune mauvaise entrée ne sera testée: vous pouvez supposer que les mouvements sont fluides. La définition «lisse» pour ce cas est: si les mouvements de la souris étaient une fonction sur les axes x et y de la toile - ce serait une fonction continue.
Gagnant
La réponse valide avec le moins de caractères dans le code gagnera. En cas d'égalité - celui qui a été affiché en premier gagnera.
EDIT: La réponse valide avec le plus de votes positifs gagnera. En cas d'égalité - celui qui a été affiché en premier gagnera. Vous pouvez être créatif sur la mise en œuvre ou être précis avec la prédiction. Je ne suis plus juge, nous le sommes tous :)
- Une réponse valide doit inclure un moyen pour moi de jouer avec (test! Je voulais dire test), soit sur un outil en ligne, soit sur un compilateur / interprète / runtime / etc librement téléchargeable.
la source
Réponses:
Javascript
Mon programme prédit la direction du pointeur en utilisant la moyenne du changement angulaire dans la direction des 20 derniers mouvements de la souris. Il utilise également la variance du changement angulaire pour créer un "nuage" d'emplacements et de directions possibles du pointeur. La couleur de chaque pointeur dans le "nuage" est censée représenter la probabilité qu'il s'agisse de la nouvelle position du pointeur de la souris, où des couleurs plus sombres représentent une plus grande probabilité. La distance du nuage de pointeurs devant la souris est calculée en utilisant la vitesse de déplacement de la souris. Il ne fait pas les meilleures prédictions mais il a l'air soigné.
Voici un violon: http://jsfiddle.net/5hs64t7w/4/
L'augmentation de la taille du nuage de pointeurs est intéressante à voir. Il peut être défini en modifiant la
cloudSize
variable sur la première ligne du programme. Voici un violon avec une taille de nuage de 10: http://jsfiddle.net/5hs64t7w/5/J'ai utilisé ces sources pour obtenir des formules de moyenne et de variance
circulaires: Moyenne circulaire: http://en.wikipedia.org/wiki/Circular_mean
Variation circulaire: http://www.ebi.ac.uk/thornton-srv/software/ PROCHECK / nmr_manual / man_cv.html
Voici le code si quelqu'un est intéressé:
la source
Java
J'ai décidé d'adopter l'approche de la machine à remonter le temps. Il s'avère que l'ingrédient clé d'une machine à voyager dans le temps est java.awt.Robot. Mon programme vous permet de déplacer votre souris pendant 10 secondes. Après les 10 secondes, il remonte dans le temps et recrée le mouvement de votre souris, tout en le prédisant parfaitement.
Voici le code:
la source
Vanilla Javascript
Pour commencer, voici une prédiction simple basée sur deux valeurs. Les dernières positions de la
n
souris sont mémorisées et conservées dans une file d'attente, la prédiction est une simple extrapolation linéaire du premier et du dernier élément de la file d'attente.Ceci est juste le code de prédiction, le code complet incluant la démo peut être vu dans this fiddle:
La démo contient un commentaire dans la prédiction qui vous permet d'utiliser à la place les deux derniers éléments de la file d'attente pour la prédiction. Rend le résultat plus "en temps réel", mais aussi moins "fluide".
Si quelqu'un veut utiliser le boilerplate workpour implémenter un algorithme de prédiction différent, n'hésitez pas. Ce n'est pas beaucoup de travail de toute façon.
la source
Javascript
Le passé est la meilleure prédiction pour l'avenir - moi, et probablement quelqu'un d'autre aussi
Ma solution est très simple. Voici d'abord le >>> Fiddle! <<<
Tout ce qu'il fait, c'est déplacer la piste passée, donc cela ressemble à la piste future. Fondamentalement, aucune math n'est impliquée (je sais, assez ennuyeux). Vous pouvez facilement voir les erreurs, en particulier lorsque vous déplacez le curseur en cercles. C'est pourquoi j'ai rendu le sentier si court;)
Le code:
la source