#1 22. August 2013 Guten Tag, ich bin dabei eine Webseite zu erstellen mit deren Hilfe man die Touch Displays unserer Geräte kalibrieren kann. Da läuft ein Linux mit XServer drauf und ich muss für die config folgende Werte bestimmen: xMIN xMAX yMIN yMAX Das Display hat eine Auflösung von 1024x768 und der Touch 4096x4096. Ich hab jetzt schon ziemlich viel gegoogelt und einen Algorithmus gefunden An Easy-to-Understand Explanation of Calibration in Touch-Screen Systems - Application Note - Maxim Aber ich glaube der läuf intern im Controller ab um die Punkte zu übersetzen. Mein Kollege meinte ich soll einfach eine Geradengleichung erstellen von zwei berührten Punkten und damit dann die gesuchten Werte bestimmen. Hab ich auch versucht, haut jedoch nicht ganz hin... Ich hab mal hier eine Skizze mit den drei Kalibrierungspunkten, unten stehen jeweils die Werte vom Touch, oben die Positionen auf dem Display: Code: [X]100,100 [X]924,100 860,644 76,636 [X]924,668 88,94 Egal wie ich es versuche, ich komme nicht auf korrekte Werte... Hat einer eine Idee dazu oder vllt. schonmal was dazu gerechnet? Hab auch versucht einfach die Skalierung zu errechnen zwischen Display und Touch und dann die Punkte da hoch und runter zu rechnen, das kommt aber auch nicht hin... Im nutzbaren Zustand steht als Konfiguration folgendes drin: Code: # Option "MaxX" "-4" # Option "MinX" "3784" # Option "MinY" "4002" # Option "MaxY" "234" Habe mir auch mal den Code von xinput_calibrator angeguckt: Code: // Compute min/max coordinates. XYinfo axys; // These are scaled using the values of old_axys const float scale_x = (old_axys.x_max - old_axys.x_min)/(float)width; axys.x_min = ((clicked_x[UL] + clicked_x[LL]) * scale_x/2) + old_axys.x_min; axys.x_max = ((clicked_x[UR] + clicked_x[LR]) * scale_x/2) + old_axys.x_min; const float scale_y = (old_axys.y_max - old_axys.y_min)/(float)height; axys.y_min = ((clicked_y[UL] + clicked_y[UR]) * scale_y/2) + old_axys.y_min; axys.y_max = ((clicked_y[LL] + clicked_y[LR]) * scale_y/2) + old_axys.y_min; // Add/subtract the offset that comes from not having the points in the // corners (using the same coordinate system they are currently in) const int delta_x = (axys.x_max - axys.x_min) / (float)(num_blocks - 2); axys.x_min -= delta_x; axys.x_max += delta_x; const int delta_y = (axys.y_max - axys.y_min) / (float)(num_blocks - 2); axys.y_min -= delta_y; axys.y_max += delta_y; Die machen das auch mit der Skalierung und dann die Multiplikation, danach wird aber noch ein delta_x errechnet und dazu addiert, da weiß ich aber nicht was die Variable num_blocks bedeutet, bei der init ist diese 8? Danke + Multi-Zitat Zitieren
#2 23. August 2013 AW: Touch kalibrieren Algorithmus Bist du dir sicher dass die Touchwerte die du ermittelst richtig sind? Vor allem die oberen Werte erscheinen da suspekt, wenn du einen Wert von 860 bekommst bei einer Auflösung von 12Bit kann da was nicht Stimmen. Da müsstest du was mit > 3000 erhalten. -> Sieht nach einem Shift/Dekodierung-Fehler aus. Mfg Rushh0ur + Multi-Zitat Zitieren