Сообщение от Hagrael
Спасибо, Костян.
Так значит x1 устанавливается равным x2 после выполнения функции. Ну а если ты вызвал функцию в первый раз? Или подождав очень долгое время в третий раз? Тогда откуда берется x1? Я так понимаю, что скорость мыши - это количество пикселей, на которое она успела сместиться за секунду. Так что наверное хранится 1000 x-ов мыши, которые были за 0, 1, 2, 3, ... 999, 1000 мс ранее. По прохождению еще одной мс, добавляется новая координата, а самая последняя удаляется. Когда же вызывается функция MouseXSpeed, то все все координаты стираются, и в конец (0 мс) добавляется текущая координата. Действительно все делается так?
|
Пфффф... Скорость - 1ая производная координаты по времени. Сколько нам надо хранить координат чтобы (зная текущее состояние точки) рассчитать мгновенную сокрость? - ОДНУ.
Если ты не знал, есть ещё MouseXSpeed,MouseZSpeed
А вообще, в блитце (смотрим хелп) эти комнады возвращают не скорость, а расстояние*, пройденное курсором с момента последнего вызова.
Global mouse1%=MouseX()
MouseXSpeed()
Global mouse2%
Global ErrMax%=0
While Not KeyHit(1)
mouse2=MouseX()
Local v%=(mouse2-mouse1)
Local v2%=MouseXSpeed()
mouse1=mouse2
If Abs(v-v2)>ErrMax
ErrMax=Abs(v-v2)
EndIf
AppTitle Int(v)+" "+v2+" er="+ErrMax
Wend
End
*- учитывая что система дискретная, и предполагая её истинную реалтаймовость (вызов функции в строго фискированное время вне зависимости от общей загруженности системы) можно сказать, что это и есть скорость: т.к. делить на 1 сек** (шаг дискретизации), тоже что и не делить.
**- секунда выбрана, как единица времени по системе СИ; шаг дискретизации подбирается программистом исходя из нужд.
***- в общем случае, аппроксимация скорости не всегда может носить такой тривальный характер (на основе определения производной).