Una LIM (lavagna interattiva multimediale) è una superficie interattiva su cui è possibile scrivere, disegnare, allegare immagini, visualizzare testi, riprodurre video o animazioni. È spesso costituita da uno schermo touch screen dove si può scrivere utilizzando una speciale penna, e da un proiettore per visualizzare l'immagine. Poiché spesso il proiettore non è allineato con lo schermo, occorre calibrare il dispositivo per poterlo utilizzare efficacemente.
Procediamo con ordine. Supponiamo di visualizzare due cerchi con centro in (x₁;y₁) e (x₂;y₂). Clicchiamo al centro dei cerchi, ma (a causa dello sfasamento tra lo schermo e il proiettore che vi invia l'immagine) il click viene rilevato rispettivamente alle posizioni (x'₁;y'₁) e (x'₂;y'₂).
Il sistema corregge la posizione del click utilizzando la regola seguente:
⎡ c₁₁ c₁₂ c₁₃ ⎤ ⎡ x'/width ⎤ ⎡ x/width ⎤
⎜ c₂₁ c₂₂ c₂₃ ⎥ · ⎜ y'/height ⎥ = ⎜ y/height ⎥,
⎣ c₃₁ c₃₂ c₃₃ ⎦ ⎣ 1 ⎦ ⎣ 1 ⎦
dove width e height danno, in pixel, larghezza e altezza della risoluzione dello schermo.
In altre parole, i valori della seconda e terza matrice devono essere compresi tra 0 e 1: per esempio, 0,5 indicherà un valore a metà dello schermo. Al contrario di quanto affermato dal
wiki di Ubuntu, non avrebbe senso utilizzare valori come 400 o 197, che corrisponderebbero a punti esterni allo schermo.
La matrice
⎡ c₁₁ c₁₂ c₁₃ ⎤
⎜ c₂₁ c₂₂ c₂₃ ⎥
⎣ c₃₁ c₃₂ c₃₃ ⎦
viene chiamata matrice di trasformazione delle coordinate (Coordinate Transformation Matrix).
Nel seguito utilizzeremo sempre la matrice
⎡ c₀ 0 c₁ ⎤
⎜ 0 c₂ c₃ ⎥,
⎣ 0 0 1 ⎦
per cui avremo
⎡ c₀ 0 c₁ ⎤ ⎡ x'/width ⎤ ⎡ x/width ⎤
⎜ 0 c₂ c₃ ⎥ · ⎜ y'/height ⎥ = ⎜ y/height ⎥.
⎣ 0 0 1 ⎦ ⎣ 1 ⎦ ⎣ 1 ⎦
Ricordando la regola per la moltiplicazione delle matrici:
x/width=c₀·(x'/width)+0·(y'/height)+c₁·1
y/height=0·(x'/width)+c₂·(y'/height)+c₃·1
1=0·(x'/width)+0·(y'/height)+1·1,
ovvero, limitandoci alle prime due equazioni (la terza è sempre verificata):
x/width=c₀x'/width+c₁
y/height=c₂y'/height+c₃.
Moltiplichiamo entrambi i membri della prima equazione per width:
x=c₀x'+c₁·width.
In particolare, sostituendo le x relative ai due click otteniamo
x₂=c₀x'₂+c₁·width
per il secondo click e
x₁=c₀x'₁+c₁·width
per il primo.
Sottraiamo membro a membro:
x₂-x₁=c₀(x'₂-x'₁).
Dividiamo i due membri per x'₂-x'₁ e scambiamo il primo membro con il secondo:
c₀=(x₂-x₁)/(x'₂-x'₁).
Ora, per calcolare c₁, ricordiamo che
x₁=c₀x'₁+c₁·width.
Portiamo a primo membro c₀x'₁ e scambiamo il primo membro con il secondo:
c₁·width=x₁-c₀x'₁.
Dividiamo i due membri per width
c₁=(x₁-c₀x'₁)/width.
Procedendo analogamente per le ordinate, utilizzando l'equazione
y/height=c₂y'/height+c₃,
si ottiene:
c₂=(y₂-y₁)/(y'₂-y'₁)
c₃=(y₁-c₂·y'₁)/height.
Riepilogando,
c₀=(x₂-x₁)/(x'₂-x'₁)
c₁=(x₁-c₀·x'₁)/width
c₂=(y₂-y₁)/(y'₂-y'₁)
c₃=(y₁-c₂·y'₁)/height.
Se avete calcolato il valore di c₀, c₁, c₂ e c₃ non vi rimane altro che eseguire da terminale il comando
xinput set-prop "$DEVICE_NAME" --type=float "Coordinate Transformation Matrix" c₀ 0 c₁ 0 c₂ c₃ 0 0 1,
dove al posto di $DEVICE_NAME dovete inserire il nome del dispositivo da calibrare, come riportato da
xinput list
Vi è venuto il mal di testa? Non avete idea di come applicare il tutto? Niente paura: in questo caso potete installare il programma
calibrateTouchScreen, disponibile in versione rpm per Fedora, che vi aiuterà a calibrare il dispositivo mediante una comoda interfaccia grafica, senza dover fare nessun calcolo.