Schiefes Viereck auf Rechteck abbilden

19/12/2008 - 22:59 von Cpt_Chaos | Report spam
Moin.

Hab ein kleines mathematisches/geometrisches Problem.
Ein Touch-Display gibt die Positionswerte für die beiden Achsen (X, Y)
als
Analogwerte aus.
Das "dumme" an der Sache ist, dass die beiden Werte
(konstruktionsbedingt)
nicht unabhàngig voneinander sind. D.h. fahr ich auf dem Display in
einer zu den
Pixeln parallele Linie von links nach rechts, sollte der Y-Wert ja
konstant bleiben.
Er steigt aber. Gleiches für die X-Achse, wenn ich von oben nach unten
fahre.

Die jeweiligen Werte (X, Y) für die 4 Eckpunkte sind diese hier:
Oben links: 101 / 145
Oben rechts: 867 / 150
Unten links: 102 / 759
Unten rechts: 848 / 802
Diese Werte sind durch eine Kalibration (antippen der Eckpunkte)
bekannt.

Bei den Y-Werten z.B. sieht man, dass die oberste Zeile nur um 5
abweicht (150-145),
die unterste Zeile jedoch schon um 43 (802-759).

Ich suche nun nach einer Möglichkeit, dieses "schiefe"
Koordinatensystem
so umzurechnen, dass ich am Ende die Koordinaten eines Rechtecks (Xt,
Yt) bekomme.
Also z.B so:

Oben links: 0 / 0
Oben rechts: 127 / 0
Unten links: 0 / 63
Unten rechts: 127 / 63

Hat hier jemand ne "einfache" Lösung?


mfG
 

Lesen sie die antworten

#1 Roland Damm
19/12/2008 - 23:26 | Warnen spam
Moin,

schrub:

Hab ein kleines mathematisches/geometrisches Problem.
Ein Touch-Display gibt die Positionswerte für die beiden Achsen
(X, Y) als
Analogwerte aus.
Das "dumme" an der Sache ist, dass die beiden Werte
(konstruktionsbedingt)
nicht unabhàngig voneinander sind. D.h. fahr ich auf dem
Display in einer zu den
Pixeln parallele Linie von links nach rechts, sollte der Y-Wert
ja konstant bleiben.
Er steigt aber. Gleiches für die X-Achse, wenn ich von oben
nach unten fahre.

Die jeweiligen Werte (X, Y) für die 4 Eckpunkte sind diese
hier: Oben links: 101 / 145
Oben rechts: 867 / 150
Unten links: 102 / 759
Unten rechts: 848 / 802
Diese Werte sind durch eine Kalibration (antippen der
Eckpunkte) bekannt.

Bei den Y-Werten z.B. sieht man, dass die oberste Zeile nur um
5 abweicht (150-145),
die unterste Zeile jedoch schon um 43 (802-759).

Ich suche nun nach einer Möglichkeit, dieses "schiefe"
Koordinatensystem
so umzurechnen, dass ich am Ende die Koordinaten eines
Rechtecks (Xt, Yt) bekomme.
Also z.B so:

Oben links: 0 / 0
Oben rechts: 127 / 0
Unten links: 0 / 63
Unten rechts: 127 / 63

Hat hier jemand ne "einfache" Lösung?



Die Umkehrung wàre einfach:

Gegeben xt, yt (in dem Koordinatensstem, welchen 0..127, 0..63
umfasst). Bekannt: xol, xor, xul, xur, yol, yor, (x/y
Oben/Unten, Links/Rechts). Dann sollte für x gelten:

x= (( xt/127)*(xor-xol)+xol)*(1-y/63)
+ ((1-xt/127)*(xur-xul)+xul)*( y/63)

Für y entsprechend x durch y ersetzen und umgekehrt.
Das ist einfach eine doppelte lineare Interpolation.

Aber du suchst ja die Umkehrung davon. Das sollte gehen, sind ja
alles nur lineare Abhàngigkeiten.

Allerdings: Bist du dir sicher, dass das Touch-Display wirklich
so ungenau ist? Nicht vielleicht einfach nur nicht genau die
Ecken getroffen? Warum sollten denn die Hersteller die
Leiterbahnen schief in das Display legen? Sind die Werte
reproduzierbar?

CU Rollo

Ähnliche fragen