Prototyp und Beschreibung der Funktion gettransresiduals()

(Funktion der freischaltpflichtigen Gruppe "Transformationsparameter")

 

gettransresiduals()
Berechnen der Klaffungen aus einer Gruppe von identischen Punkten anhand
eines Helmert- oder Molodenski-Parametersatzes.

Prototyp der DLL-Funktion in C++ Syntax (Kleinschreibung beachten!):
extern "C" __declspec(dllimport) unsigned long __stdcall gettransresiduals(
     double aCartQ[][3],
     double aCartZ[][3],
     double aResid[][3],
     unsigned long nCount,
     unsigned short nTyp,
     double aParam[7]);

Prototyp der DLL-Funktion in Visual Objects Syntax:
_DLL function gettransresiduals(;
     aCartQ as real8 ptr,;                 // 4 Byte
     aCartZ as real8 ptr,;                 // 4 Byte
     aResid as real8 ptr,;                 // 4 Byte  nCount * 3 * sizeof(REAL8)
     nCount as dword,;                     // 4 Byte
     nTyp as word,;                        // 2 Byte
     aParam as real8 ptr);                 // 4 Byte
as logic pascal:geodll32.gettransresiduals // 4 Byte


Die Funktion erzeugt aus zwei Arrays mit kartesischen XYZ-Koordinaten
identischer Punkte und einem zuvor daraus berechneten Parametersatz der
räumlichen Helmert-Transformation oder der der Molodenski-Transformation ein
Array mit den daraus resultierenden Klaffungen. Die Klaffungen können bei
Koordinaten, die mit dem Helmert- oder Molodenski-Paramtersatz transformiert
worden sind, für eine anschließende Korrektur verwendet werden.

Da die Funktion wegen der umfangreichen Berechnungen zeitintensiv ist, kann
mit der Funktion seteventloop() die Event-Bearbeitung während der Berechnung
durch Unterbrechung der Bearbeitungsschleife zugelassen werden.


Die Parameter werden folgendermaßen übergeben bzw. zurückgegeben:
aCartQ[][3] Kartesische Koordinaten X, Y, Z des Quell-Koordinatenbezugs-
(ref)       systems in einem zweidimensionalen Array des Typs double. Die
            erste Dimension zählt die in nCount übergebene Anzahl der
            verfügbaren Kartesischen Koordinaten identischer Punkte im
            Quellsystem. Die zweite Dimension ist 3 für die X-, Y- und
            Z-Komponenten der Kartesischen Koordinaten des Quellsystems. Die
            Anzahl der Elemente in den Arrays aCartQ und aCartZ muss gleich
            sein. Der Aufbau des Arrays ist weiter unten beschrieben.

aCartZ[][3] Kartesische Koordinaten X, Y, Z des Ziel-Koordinatenbezugs-
(ref)       systems in einem zweidimensionalen Array des Typs double. Die
            erste Dimension zählt die in nCount übergebene Anzahl der
            verfügbaren Kartesischen Koordinaten identischer Punkte im
            Zielsystem. Die zweite Dimension ist 3 für die X-, Y- und
            Z-Komponenten der Kartesischen Koordinaten des Zielsystems. Die
            Anzahl der Elemente in den Arrays aCartQ und aCartZ muss gleich
            sein. Der Aufbau des Arrays ist weiter unten beschrieben.

aResid[][3] Ermittelte Klaffungen in einem zweidimensionalen Array des Typs
(ref out)   double jeweils für die X-, Y- und Z-Komponente der Koordinaten in
            den Arrays aCartQ und aCartZ in Meter.
            Für das Array muss Speicherplatz der Größe nCount*3*sizeof(double)
            Bytes von der aufrufenden Routine zur Verfügung gestellt werden.
            Der Aufbau des Arrays ist weiter unten beschrieben.

nCount      Anzahl der verfügbaren identischen Punkte, die als Kartesische
            Koordinaten in den Arrays aCartQ und aCartZ und als berechnete
            Klaffungen im Feld aResid gespeichert sind.

nTyp        Transformationsmethode der Werte in aParam.
            1: Helmert-Transformation: Coordinate Frame Rotation
            2: Helmert-Transformation: Position Vector Transformation
            3: Helmert-Transformation: European Standard ISO 19111
            4: Molodenski-Transformation

aParam[7]   Sieben Helmert-Parameter in einem Array mit 7 Elementen des
(ref)       Typs double. Die Variante mit 7 Array-Elementen wird mit den
.           Transformationsmethoden 1 bis 3 verwendet.
.           1. Arrayelement: Verschiebung auf der X-Achse [Meter]
.           2. Arrayelement: Verschiebung auf der Y-Achse [Meter]
.           3. Arrayelement: Verschiebung auf der Z-Achse [Meter]
.           4. Arrayelement: Rotationswinkel um die X-Achse [Sekunden]
.           5. Arrayelement: Rotationswinkel um die Y-Achse [Sekunden]
.           6. Arrayelement: Rotationswinkel um die Z-Achse [Sekunden]
.           7. Arrayelement: Maßstabsfaktor [ppm]
.           ------------------------------------
.           | V1 | V2 | V3 | R1 | R2 | R3 | MF |
.           ------------------------------------
.           Für das Array muss Speicherplatz in der Größe 7*sizeof(double)
.           Bytes von der aufrufenden Routine zur Verfügung gestellt werden.
oder
aParam[3]   Drei Molodenski-Parameter in einem Array mit 3 Elementen des
(ref)       Typs double. Die Variante mit 3 Array-Elementen wird nur mit der
.           Transformationsmethoden 4 verwendet.
.           1. Arrayelement: Verschiebung auf der X-Achse [Meter]
.           2. Arrayelement: Verschiebung auf der Y-Achse [Meter]
.           3. Arrayelement: Verschiebung auf der Z-Achse [Meter]
.           ----------------
.           | V1 | V2 | V3 |
.           ----------------
.           Für das Array muss Speicherplatz in der Größe 3*sizeof(double)
.           Bytes von der aufrufenden Routine zur Verfügung gestellt werden.

returnWert  Im Fehlerfall gibt die Funktion FALSE zurück, sonst TRUE.


Die zweidimensionalen Arrays aCartQ[][3], aCartZ[][3] und aResid[][3] sind mit
Werten des Typs double gefüllt und folgendermaßen aufgebaut:
----------------------------------------------------------------------
| K1-X | K1-Y | K1-Z | K2-X | K2-Y | K2-Z | ... | Kn-X | Kn-Y | Kn-Z |
----------------------------------------------------------------------
mit K1 -› Kn: Koordinaten bzw. Klaffungen 1 bis n
X:            X-Komponente
Y:            Y-Komponente
Z:            Z-Komponente


Freischaltung:
Die Funktion ist Bestandteil der freischaltpflichtigen Funktionsgruppe
"Transformationsparameter". Sie wird zusammen mit den anderen Funktionen
der Gruppe durch die Eingabe der bei der Vertriebsfirma erworbenen
Freischaltparameter per Aufruf der Funktion setunlockcode() zur
uneingeschränkten Nutzung frei geschaltet.
Ohne Freischaltung werden maximal 25 identische Punkte verarbeitet.