Inspirado neste exemplo de uso do d3js , desafio você a criar uma tela (ou seu idioma equivalente) na qual as trilhas do ponteiro do mouse serão exibidas, com o seguinte toque:
The Twist
Você não deve exibir as trilhas de onde estava o ponteiro do mouse , mas as "trilhas" de onde estará (poderá) no futuro.
Você pode fazer isso usando:
Uma máquina do tempo, ou
Estimativas probabilísticas baseadas em movimentos anteriores do mouse
Suposições
Caso você não tenha escolhido a implementação da máquina do tempo, quando o mouse não se mover por mais do que o limite de milissegundos, você não poderá exibir nenhuma das trilhas. (O valor limite depende de você escolher).
A imagem do cursor é sua e não precisa ser a mesma do cursor do sistema operacional (você pode desenhar pequenos círculos ou pontos simples).
Nenhuma entrada ruim será testada: você pode assumir que os movimentos são suaves. A definição 'suave' para este caso é: se os movimentos do mouse fossem uma função sobre os eixos xey da tela - seria uma função contínua.
Ganhando
A resposta válida com o mínimo de caracteres no código vencerá. Em caso de empate - o que foi lançado primeiro ganhará.
EDIT: A resposta válida com o maior número de votos será vencedora. Em caso de empate - o que foi lançado primeiro ganhará. Você pode ser criativo na implementação ou ser preciso com a previsão. Eu não sou mais o juiz, todos somos :)
- Uma resposta válida deve incluir uma maneira de brincar (test! Quis dizer test), em uma ferramenta on-line ou em um compilador / intérprete / tempo de execução / etc.
fonte
Respostas:
Javascript
Meu programa prevê a direção do ponteiro usando a média da mudança angular na direção dos últimos 20 movimentos do mouse. Ele também usa a variação da alteração angular para criar uma "nuvem" de possíveis locais e direções do ponteiro. A cor de cada ponteiro na "nuvem" deve representar a probabilidade de ser a nova posição do ponteiro do mouse, onde cores mais escuras representam uma maior probabilidade. A distância da nuvem do ponteiro à frente do mouse é calculada usando a velocidade do movimento do mouse. Não faz as melhores previsões, mas parece limpo.
Aqui está um violino: http://jsfiddle.net/5hs64t7w/4/
É interessante ver o aumento do tamanho da nuvem de ponteiros. Pode ser definido alterando a
cloudSize
variável na primeira linha do programa. Aqui está um violino com um tamanho de nuvem de 10: http://jsfiddle.net/5hs64t7w/5/Usei essas fontes para obter fórmulas para média circular e variação:
Média Circular: http://en.wikipedia.org/wiki/Circular_mean
Variação Circular: http://www.ebi.ac.uk/thornton-srv/software/ PROCHECK / nmr_manual / man_cv.html
Aqui está o código, se alguém estiver interessado:
fonte
Java
Decidi adotar a abordagem da máquina do tempo. Acontece que o principal ingrediente de uma máquina do tempo é o java.awt.Robot. Meu programa permite que você mova o mouse por 10 segundos. Após os 10 segundos, ele volta no tempo e recria o movimento do mouse, prevendo-o perfeitamente.
Aqui está o código:
fonte
Javascript de baunilha
Apenas para começar, aqui está uma previsão simples com base em dois valores. As últimas
n
posições do mouse são memorizadas e mantidas em uma fila, a previsão é uma extrapolação linear simples do primeiro e do último elemento na fila.Este é apenas o código de previsão, o código completo, incluindo a demonstração, pode ser visto em this fiddle:
A demonstração contém um comentário na previsão que permite que você use os dois últimos elementos na fila para a previsão. Torna o resultado mais "em tempo real", mas também menos "suave".
Se alguém quiser usar o boilerplate workpara implementar um algoritmo de previsão diferente, fique à vontade. De qualquer forma, não é muito trabalho.
fonte
Javascript
O passado é a melhor previsão para o futuro - eu, e provavelmente outra pessoa também
Minha solução é muito simples. Primeiro, aqui está o >>> Fiddle! <<<
Tudo o que faz é mudar a trilha do passado, para que pareça a trilha do futuro. Basicamente, nenhuma matemática está envolvida (eu sei, muito chata). Você pode ver facilmente os erros, especialmente ao mover o cursor em círculos. Foi por isso que fiz a trilha tão curta;)
O código:
fonte