Придумал очень простое решение, как измерить частоту с точностью до сотых без вообще каких-либо инструментов, кроме калькулятора:
Нужно взять МАЛЕНЬКИЙ объект и быстро передвигать его по экрану. При быстром передвижении будет видна явная ступенчатость, т.е. вы будете видеть не один объект, а как бы сразу много его копий одновременно. Между этими копиями есть определённое расстояние. Можно измерить это расстояние, и если скорость передвижения объекта равномерна, то можно вычислить частоту монитора по формуле (speed / distance), где speed — скорость движения объекта в пикселях в секунду, а distance — расстояние между копиями объекта в пикселях.
Для измерений нужны линейка, глаза и калькулятор, но вместо использования линейки можно просто посчитать количество копий объекта на экране, тогда остаются только глаза и калькулятор.
Попробовал способ на практике:
- Speed = 7170 px/sec, distance = 238.7px. Результат: 30.04 Гц. Реальная частота стояла 30 Гц. Ошибка 0.04 Гц.
- Speed = 4996 px/sec, distance = 146.9px. Результат: 34.004 Гц. Реальная частота стояла 34 Гц. Ошибка 0.004 Гц.
- Speed = 7165 px/sec, distance = 119.4px. Результат: 60.02 Гц. Реальная частота стояла 60 Гц. Ошибка 0.02 Гц.
- На частоте 120 Гц расстояние между копиями объекта не изменилось, т.е. в реальности я получил те же самые 60 Гц. Вариантов два: либо мой монитор на самом деле выдаёт 60 Гц вместо 120 Гц, либо проблема в выбранных технологиях, т.к. я писал программу на HTML+js, и сам браузер мог порезать анимацию.
Кто-то может посоветовать, с помощью каких инструментов можно переписать программу так, чтобы точно быть уверенным, что анимация не режется?
PS. Кто-то может удивиться, как я смог измерить частоту с такой высокой точностью, даже не пользуясь линейкой. Дело в том, что я подбирал такую скорость, чтобы скорость объекта была кратной частоте экрана. В итоге в этот момент 7 копий объекта как бы замирают на месте, при этом постоянно мерцая. В итоге я просто поделил ширину поля, в котором передвигался объект, на 7, и получил расстояние между объектами С ОЧЕНЬ ВЫСОКОЙ ТОЧНОСТЬЮ.
PS. Скорость движения объекта тоже была задана с максимальной точностью, т.к. я делал свою программу на HTML+js, а там можно получить текущее время с точностью до микросекунд, а на основе времени при отрисовке анимации можно точно рассчитать позицию объекта.
PS. Дополнительно я произвёл измерение на 72 Гц. Я получил 17 копий объекта, что дало результат 72.00042 Гц. Но из этих 17 копий объекта отображались не все: каждые 5 копий был пустой пробел, который с определённой скоростью двигался вправо. Этого говорит о том, что 1 из 6 кадров выкидывается, что в итоге даёт нам частоту 60.00035 Гц. Получается, на самом деле частота монитора не 72 Гц, а всего лишь 60 Гц, хотя в спецификации монитора указано, что он может работать с частотой до 76 Гц (хотя как я говорил выше, возможно, это вина не монитора, а браузера, который может резать анимацию до 60 кадров в секунду).
PS. Если Ваши копии постоянно скачут, и настройка скорости не помогает, то подберите ширину поля, в котором двигается объект, так, чтобы она была кратна скорости, делённой на предполагаемую частоту. Если это не помогает, возможно, у Вас плохой таймер, который срабатывает не через одинаковые промежутки времени, либо эти промежутки слишком большие. Подбор ширины кстати может приблизить Ваши результаты к предполагаемым, но я получал точность 0.01 Гц и без подбора ширины.