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!