Я использую 2 дисплея (сенсорный экран 1920x1080 слева, 1440x900 справа). Если я когда-либо использую
xinput set-prop "Acer T230H" "Coordinate Transformation Matrix" 0.566 0 0 0 .71111 0 0 0 1
(в качестве значения матрицы)
0.566 0 0
0 0.71111 0
0 0 1
, то x-координата рассчитывается правильно, но y-координата должна быть умножена на ~ 1.2, чтобы быть корректной .
Где я должен разместить свой 1.2?
Если вы хотите масштабировать координату y, вы должны умножить 0,71111 на коэффициент масштабирования 1,2. Общая формула:
, если матрица
a b c
d e f
g h i
, то формула
new_x = (a * old_x + b * old_y + c) / (g * old_x + h * old_y + i)
new_y = (d * old_x + e * old_y + f) / (g * old_x + h * old_y + i)
. Это проективное преобразование. Почти во всех случаях (то есть во всех случаях, за исключением случаев, когда ваш дисплей представляет собой проектор, который асимметрично проецируется на стену), вам просто нужно линейное преобразование, поэтому вы устанавливаете g h i
в 0 0 1
.
Если вы когда-нибудь собираетесь делать более продвинутые вещи, то вам следует знать, что для массы этого вычисления old_x / new_x и т. Д. Находятся в диапазоне от 0 до 1.