Я должен протестировать программное обеспечение, которое рассматривает некоторые движения мыши как "жесты". Для такой задачи я должен эмулировать движение мыши от точки для указания на B, не в прямой линии, но когда реальная мышь перемещается - с кривыми, немного jaggedyness и т.д. Есть ли какое-либо доступное решение (сам алгоритм/код, не library/exe), что я могу использовать?
Конечно, я могу записать некоторую простую синусоидальную математику один, но это было бы очень сырой эмуляцией человеческой руки, ведущей мышь. Возможно, такая задача уже была решена многочисленные времена, и я могу просто одолжить существующий код?:)
посмотрите на файл mouse.simba , который является частью SRL Framework , Макро программа, предназначенная для работы с онлайн-играми, такими как Runescape . Runescape имеет обширные возможности обнаружения макроса , поэтому все части структуры SRL были разработаны, чтобы выглядеть как можно более человеку - в частности, функции мыши.
Код находится в Паскале, но должно быть довольно легко читать. Посмотрите на MMOUSE ()
MMOUSE () MMOUSE () MMOUSE () MMOUSE () BENLALD100, она очень реально выполняет расширенные движения, такие как петли и превышение ее цели, а также постоянно различные ускорения и направления (также теперь имеет движения типа сенсорной панели ноутбука). Если вы хотите проверить его, вам нужно скачать Simba и включить SRL-включить .
Одним из способов зафиксировать это поведение может быть определение невидимой «сетки» на экране, где вы отслеживаете, через какие квадраты перемещается мышь.
Если эта часть работает и записывает правильно, нет необходимости бомбардировать ее тестами, поскольку вы знаете, что каждый квадрат сетки выполняет свою работу. Это также упрощает интерпретацию жеста.
Создайте простое тестовое приложение, которое показывает случайную позиционную точку каждые две секунды. Следуйте за точкой самостоятельно и запишите свои натуральные движения мыши.
Если делитель является явной константой времени компиляции (т.е. если x
в 10 ^ x является константой времени компиляции), нет никакого смысла использовать что-либо иное, чем предоставленные языком операторы /
и %
. Если есть значимый способ ускорить их для явных возможностей 10, любой уважающий себя компилятор будет знать, как это сделать и сделает это для вас.
Единственной ситуацией, когда вы можете подумать о «пользовательской» реализации (кроме тупого компилятора), является ситуация, когда x
является значением времени выполнения. В этом случае потребуется какая-то аналогия десятичного сдвига и десятичного сдвига и . На двоичной машине, вероятно, возможно ускорение, но я сомневаюсь, что вы сможете достичь чего-либо практически значимого. (Если бы числа хранились в двоично-десятичном формате, то было бы легко, но в «нормальных» случаях - нет.)
Попробуйте обернуть * в *
в java.io.BufferedReader
. А также используйте doseq
вместо doall
, как указал devstopfix:
(doseq [ln (line-seq (java.io.BufferedReader. *in*))]
(println ln))
Обратите внимание, что line-seq
задокументирован для требования BufferedReader
в качестве источника.
Как насчет записи реальных жестов и их воспроизведения? Это будет так же реально, как все, что вы можете синтезировать, и это будет повторяемым (что хорошо для тестирования).