“libinput Calibration Matrix”的确切格式是什么(即它的每个元素代表什么)以及它与“坐标变换矩阵”有什么关系?如果“坐标变换矩阵”负责将触摸屏点映射到显示点,为什么还不够,为什么还需要“libinput 校准矩阵”?每个矩阵负责校准过程的哪一部分?
我还没有找到一个参考站点来解释“libinput Calibration Matrix”代表什么元素(与“坐标变换矩阵”相反)。我设法找到的是相关系数的以下“定义”:
a = (screen_x * 6 / 8) / (c3_x - c0_x)
c = ((screen_x / 8) - (a * c0_x)) / screen_x
e = (screen_y * 6 / 8) / (c3_y - c0_y)
f = ((screen_y / 8) - (e * c0_y)) / screen_y
没有任何解释它们是如何派生的/它们应该代表什么。总结一下:“libinput校准矩阵”的“官方”定义是什么,它与“坐标变换矩阵”有什么不同?
我开发了 xlibinput_calibrator。在这里 [1] 您可以找到“校准矩阵”计算背后的数学实现。
基本上,您需要将坐标从“触摸空间”转换为“屏幕空间”。首先,您需要在“触摸空间”和“屏幕空间”中收集至少 3 个点的坐标。[2]
校准矩阵 (C)、“触摸空间”中的坐标 (tx_i, ty_i, 其中 i=1,2,3) 和“屏幕空间”中的坐标 (sx_i, sy_i) 由以下公式关联:
其中“inv(Ti)”计算 Ti 的逆矩阵。结果是(感谢 Octave):
上面的一个是“通用”公式,其中还考虑了旋转和轴反转(及其组合)等情况。您发布的一个更简单(只需要 2 分)在这些情况下可能会失败。
您还必须考虑 libinput 需要归一化形式 (Cn) 的矩阵。所以它变成
在哪里
[1] https://github.com/kreijack/xlibinput_calibrator/blob/master/src/calibrator.cc#L144
[2] 在 xlibinput_calibrator 中,我取 4 个点,结果矩阵是由点的任意组合计算的 4 个矩阵的平均值。