singlepost

Определение пробега мыши << На главную или назад  

Мені в дипломній роботі треба навчити комп'ютер визначати швидкість, прискорення, траекторію, пройдений шлях візочка на колесах. Тобто автоматизована система збору даних на фізичних експеремерементах.
Я подумав і вирішив: нащо мені конструювати нову установку, якщо можна використати те що є в кожного під руками.
Я написав оболонку програми на Delphi вона маючи час і пройдений шлях, визначає все що треба і будує графіки.
Виміри часу буде проводити годинник комп'ютера.
Відстань або пройдений шлях, я планую вимірювати мишкою, тобто зв'язати мишку з годинником, і при початкові руху мишки вмикається секундомір і програма починає фіксувати скільки мишка пройшла в тому чи іншому напрямку"по осях координат (x:y). при зупинці мишкисекундомір також зупиняється
А тепер суть проблеми:
мені не получається навчити програму вимірювати пройдену мишкою відстань, я вже не говорю про розкладання її по осях координат.
через що в мене питання!!!!!! Чи можливо взагалі розв'язати дану задачу на Delphi? Якщо ні то на чому буде най легше це зробити?

56 ответов в теме “Определение пробега мыши”

  1. 23
    Антон Кононов ответил:

    в #14 уже все написал

    и ускорение, и траектория, и скорость, и все остальное нормально снимаются при таком методе (по крайней мере в 3D-шутерах мы видим что все эти параметры настраиваемые, например в Квейк)

  2. 22
    Серега Губченко ответил:

    а не приходила мысль то что мышь движется и таймер работает. но мышь может двигаться с разной скоростью-следовательно только координаты.

  3. 21
    Михаил Асташкевич ответил:

    Кажется, еще приемлемо использовать хуки.

  4. 20
    Александр Lert ответил:

    Ну, по крайней мере начиная с Windows XP, DirectInput внутренне работает через тот же Raw Input (в какой-то статье DirectX SDK было сказано), так что преимуществ не имеет, да и использовать Raw Input на мой взгляд проще.

  5. 19
    Константин Смотритель ответил:

    Точно, для такого ввода также можно использовать DirectInput

  6. 18
    Александр Lert ответил:

    Мда, драйвер это по-моему, перебор :) Проще использовать сырой ввод (Raw Input), который возвращает данные о перемещении с максимальной точностью, обеспечиваемой мышью, при этом никаких проблем с границами экрана нет. Подробности в MSDN //msdn.microsoft.com/en-us/library/ms645536.

  7. 17
    Влад Темный ответил:

    та не про планшеты это к тому что он постоянно позиционирует курсор – причем гоооораздо чаще чем мышь или глупые шутеры… и получается что я непрерывно махаю мышкой хотя я вообще не двигаю пером.

  8. 16
    Александр Дзюба ответил:

    абсолютно ничем не ограниченная площадка и не требующая позиционирования – фильтр на драйвер мыши (или планшета)

    //msdn.microsoft.com/en-us/library/aa973512.aspx

  9. 15
    Константин Смотритель ответил:

    [На будущее - тему и посты пишем по-русски]

  10. 14
    Антон Кононов ответил:

    делайте как в три дэ шутерах:

    в начале работы программы позиционируем мышь в центр рабочего стола

    1) обрабатываем в цикле чтение координат мыши.

    2) если мышь сдвинулась от центра, то вычисляем насколько она от центра сдвинулась и прибавляем к общей сумме

    3) снова позиционируем мышь в центр, идем в пункт 1

    таким образом ты не ограничен площадкой 20 на 20. вообще в принципе ничем не ограничен

  11. 13
    Влад Темный ответил:

    так вот почему в этих шутерах планшет не работает>:[

  12. 12
    Владимир Муромский ответил:

    Есть один косяк. Мышка, как известно, движется только в двух координатах. И если слишком часто вызывать getCursorPos(), получится что мышка едет либо по вертикали, либо по горизонтали (особенно если возить медленно). При этом погрешность может быть (на глазок) в 1.4 раза

  13. 11
    Славік Поліщук ответил:

    Но у меня вопрос.
    мышка в реальности не покидает пределы экрана, что будет выдавать эта процедура, когда курсор будет пытаться покинуть эти пределы?

  14. 10
    Влад Темный ответил:

    от 0 до screen.width или чтото типа того, по другому только программно задать координаты.

  15. 9
    Славік Поліщук ответил:

    то есть получается что моя коляска на колесах должна будет ездить на площади не более 20х20 см что-ли?

  16. 8
    Влад Темный ответил:

    напиши что это метры =)

  17. 7
    Славік Поліщук ответил:

    логично =).

  18. 6
    Влад Темный ответил:

    Мне в дипломной работе надо научить компьютер определять скорость, ускорение, траекторию, пройденный путь коляски на колесах. То есть автоматизированная система сбора данных на физических експеремерементах.
    Я подумал и решил: зачем мне конструировать новую установку, если можно использовать то что есть у каждого под руками.
    Я написал оболочку программы на Delphi она имея время и пройденный путь, определяет все что нужно и строит графики.
    Измерения времени будет проводить часы компьютера.
    Расстояние или пройденный путь, я планирую измерять мышкой, т.е. связать мышку с часами, и при начальные движения мыши включается секундомер и программа начинает фиксировать сколько мышка прошла в том или ином направлении "по осям координат (x: y) при остановке мишкисекундомир также останавливается
    А теперь суть проблемы:
    мне не получается обучить программу измерять пройденное мышкой расстояние, я уже не говорю о разложении ее по осям координат.
    за чего у меня вопрос !!!!!! Возможно ли вообще решить данную задачу на Delphi? Если нет то на чем будет самым легче это сделать?

  19. 5
    Славік Поліщук ответил:

    Вкратце. Мне надо с помощью компьютерной мыши измерять расстояния которое она проедет, то есть мышь.

  20. 4
    Влад Темный ответил:

    getcursorpos() вызываешь раз в 10 милсекунд например и смотришь координаты.. сравниваешь с предыдущими – получаешь .. ну ты понял идею.

  21. 3
    Славік Поліщук ответил:

    Да, ясно. Спасибо!! Буду пробовать.

  22. 2
    Влад Темный ответил:

    посмотри в гугле про горячие клавиши
    будет удобнее чтобы запись вести

  23. 1
    Антон Кононов ответил:

    а по русски?

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.