Kurze Rückmeldung:
Das klappt einwandfrei mit dem im Link vorhandenm Beispielcode.
Für meine Zwecke reichen die beiden auskommentierten Zeilen. Die 4
Zeilen mit x2 und x3 habe ioch auskommmentiert und die beiden mit x2
reingenommen.
Falls der Link mal nicht mehr geht, hier der Code, so wie ich ihn jetzt
drin habe:
1 | // Normalize the u,v coordinates in the range [-1;+1]
|
2 | volatile float x0 = ((2.0 * x_32) - SOURCE_XSIZE) / SOURCE_XSIZE;
|
3 | volatile float y0 = ((2.0 * y_32) - SOURCE_YSIZE) / SOURCE_YSIZE;
|
4 |
|
5 | // Calculate l2 norm
|
6 | float r = x0 * x0 + y0 * y0;
|
7 |
|
8 | // Calculate the deflated or inflated new coordinate (reverse transform)
|
9 | // float x1 = x0 / (1.0 - (PARSER_ALPHAX * r));
|
10 | // float y1 = y0 / (1.0 - (PARSER_ALPHAY * r));
|
11 | // float x2 = x0 / (1.0 - (PARSER_ALPHAX * ((x1 * x1) + (y1 * y1))));
|
12 | // float y2 = y0 / (1.0 - (PARSER_ALPHAY * ((x1 * x1) + (y1 * y1))));
|
13 |
|
14 | // Forward transform
|
15 | float x2 = x0 * (1.0 - PARSER_ALPHAX * r);
|
16 | float y2 = y0 * (1.0 - PARSER_ALPHAY * r);
|
17 |
|
18 | // De-normalize to the original range
|
19 | float k = (x2 + 1.0) * DEST_XSIZE / 2.0;
|
20 | float l = (y2 + 1.0) * DEST_YSIZE / 2.0;
|
Kurze Erklärung hierzu:
SOURCE_nSIZE und DEST_nSIZE sind wg. unterschiedlichen Größen des
Koordinatensystems. Einmal wird in mm eingelesen und als Ausgabe habe
ich einen 16-Bit DAC...
x_32 und y_32 sind die Werte aus der Datei als 32-Bit Variable
umgerechnet. Zur Info: 250,0000mm (im maximum) entsprechen, der
Einfachheit halber, 2500000.
k und l sind das Ergebnis.
Hoffe mich klar ausgedrüückt zu haben. ;)