Jak dokładnie mierzyć ruch myszy w calach lub centymetrach dla myszy ze znanym DPI

Mam mysz do gier Logitech G500, która działa w pełnej rozdzielczości DPI 5700.

Próbuję napisać program w C ++, który dokładnie mierzy ruch poziomy myszy w jednostkach fizycznych, tj. centymetry lub cale.

Używam danych wejściowych API Windows i Windows Raw za pomocą komunikatu WM_INPUT, aby uzyskać surowe zmiany ruchu od myszy.

Zakładam, że 1 jednostka ruchu zgłoszona przez WM_INPUT to 1/5700 cala, a ponieważ śledzę ruch sieciowy myszy, pomyślałem, że mogę wykonać proste obliczenia, aby uzyskać ruch fizyczny netto:

odległość (cale) = total_movement_from_wminput / dpi; // dpi = 5700 w tym przypadku

Niestety, obliczenia nie wydają się dokładne. Z pomiarów fizycznych na mojej podkładce pod mysz mogę powiedzieć, że przy około 6 calach ruchu myszy, obliczenie daje wartość około 5 i pół cala (utrata półtora cala).

Gdzie się mylę? Ustawiłem myszą na 5700 DPI w panelu sterowania, czy jej rzeczywista DPI może być mniejsza niż to? Czy moje przypuszczenie, że 1 jednostka zmiany za pomocą WM_INPUT wynosi 1 / dpi cale nieprawidłowego ruchu fizycznego?

Czy ktoś ma jakieś pomysły na to, jak mogę to osiągnąć? Dzięki!

questionAnswers(1)

yourAnswerToTheQuestion