Ora ho bisogno di aiuto.
Da https://wiki.ubuntu.com/X/InputCoordinateTransformation link leggo che
[code]Using the Coordinate Transformation Matrix
By default, the CTM for every input device in X is the identity matrix. As an example, lets say you touch a touchscreen at point (400, 197) on the screen:
⎡ 1 0 0 ⎤ ⎡ 400 ⎤ ⎡ 400 ⎤
⎜ 0 1 0 ⎥ · ⎜ 197 ⎥ = ⎜ 197 ⎥
⎣ 0 0 1 ⎦ ⎣ 1 ⎦ ⎣ 1 ⎦[/code]
Quindi la regola per ottenere le nuove coordinate (x’;y’) dalle vecchie (x;y) dovrebbe essere la seguente:
⎡ c₁₁ c₁₂ c₁₃ ⎤ ⎡ x ⎤ ⎡ x' ⎤
⎜ c₂₁ c₂₂ c₂₃ ⎥ · ⎜ y ⎥ = ⎜ y' ⎥
⎣ c₃₁ c₃₂ c₃₃ ⎦ ⎣ 1 ⎦ ⎣ 1 ⎦
Applicando la regola di moltiplicazione tra matrici, si ottiene che
x'=c₁₁x+c₁₂y+c₁₃
y'=c₂₁x+c₂₂y+c₂₃
1=c₃₁x+c₃₂y+c₃₃
In particolare, poiché consultando la https://wiki.archlinux.org/index.php/Calibrating_Touchscreen#Calculate_the_Coordinate_Transformation_Matrix si vede che la matrice di trasformazione delle coordinate è
⎡ c₀ 0 c₁ ⎤
⎜ 0 c₂ c₃ ⎥
⎣ 0 0 1 ⎦
si ottiene
⎡ c₀ 0 c₁ ⎤ ⎡ x ⎤ ⎡ x' ⎤
⎜ 0 c₂ c₃ ⎥ · ⎜ y ⎥ = ⎜ y' ⎥
⎣ 0 0 1 ⎦ ⎣ 1 ⎦ ⎣ 1 ⎦
e quindi
x'=c₀x+c₁
y'=c₂y+c₃
Poiché, nel mio caso, ho rilevato i valori
code -> (179;84.4)
(896;96) -> (877.5;77.6)
(128;672) -> (186;648.4)
(896;672) -> (920.5;654.7)[/code]
segue che, prendendo i valori medi,
x∈[128;896] -> x'∈[182.5;899]
y∈[96;672] -> y'∈[81;651.6]
Poiché
x'₂=c₀x₂+c₁
x'₁=c₀x₁+c₁
si ottiene, sottraendo membro a membro,
x'₂-x'₁=c₀(x₂-x₁)
da cui
Ovvero, nel mio caso,
c₀=(899-182.5)/(896-128)≈0.933
Analogamente,
che, nel mio caso, diventa
c₂=(651.6-81)/(672-96)≈0.991
Forse fino a qui siamo a posto.
Ora, per calcolare c₁, ricordiamo che
x'₁=c₀x₁+c₁
e quindi
che, nel mio caso, diventa
c₁=182.5-0.933·128≈63.1
Analogamente,
che, nel mio caso, diventa
c₃=81-0.991·96≈-14.1
E già qui ho ottenuto una stranezza: la guida di Archlinux dice che
[quote=Archlinux]Now, calculate these as accurate as possible:
c₀ = touch_area_width / total_width
c₂ = touch_area_height / total_height
c₁ = touch_area_x_offset / total_width
c₃ = touch_area_y_offset / total_height[/quote]
Quindi secondo la guida di Archlinux c₁ dovrebbe essere l’offset della x diviso la larghezza dello schermo, mentre io ho ricavato c₁ come semplice offset della x (discorso analogo vale per c₃).
Visto il concetto espresso dal primo link (il wiki di Ubuntu), mi fiderei di più dei calcoli fatti moltiplicando le matrici (da cui ho ricavato le mie formule) che della guida di Archlinux (per quanto sia, solitamente, ben fatta).
Solo che la guida di Archlinux dice anche che, per applicare la matrice, bisogna eseguire il comando
xinput set-prop "Device Name" --type=float "Coordinate Transformation Matrix" c₀ 0 c₁ 0 c₂ c₃ 0 0 1
Quindi in teoria dovrei dare
xinput set-prop "Device Name" --type=float "Coordinate Transformation Matrix" 0.933 0 63.1 0 63.1 -14.1 0 0 1
Tuttavia, se provo ad eseguire il comando (in realtà oggi non ho applicato il comando, ma l’ho fatto applicare ad un programma in python che ho scritto, usando nuovi click che ho dimenticato di segnare, ma che non dovrebbero differire sostanzialmente da quelli indicati qui), il cursore sparisce dallo schermo e non riesco più ad usare il touch screen (per l’esattezza, vedo i menù in alto a destra che si aprono anche se il cursore dovrebbe stare al centro dello schermo).
Dove sbaglio?