Prototyp und Beschreibung der Funktion gettranshelmert()

(Funktion der freischaltpflichtigen Gruppe "Transformationsparameter")

 

gettranshelmert()
Berechnen von sieben Helmert-Parametern und einer Rotationsmatrix aus
identischen Punkten in verschiedenen Bezugssystemen.

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

Prototyp der DLL-Funktion in Visual Objects Syntax:
_DLL function gettranshelmert(;
     aCartQ as real8 ptr,;                   // 4 Byte
     aCartZ as real8 ptr,;                   // 4 Byte
     nCount as dword,;                       // 4 Byte
     nTyp as word,;                          // 2 Byte
     aHelmert as real8 ptr,;                 // 4 Byte
     aRotMat as real8 ptr);                  // 4 Byte
as logic pascal:geodll32.gettranshelmert     // 4 Byte


Die Funktion berechnet sieben Helmert-Transformationsparameter aus
identischen Punkten in unterschiedlichen Quell- und Ziel-
Koordinatenbezugssystemen. Die identischen Punkte sind als Kartesische
Koordinaten in Arrays gespeichert.

Die Helmert-Transformation ist eine Transformation für dreidimensionale
kartesische Koordinaten. Sie enthält als Paramter drei
Verschiebungsvektoren, drei Rotationswinkel und einen Maßstabsfaktor. Die
Rotationen sind auch in einer Rotationsmatrix verfügbar.

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.

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

nTyp        Transformationsmethode der Helmert-Transformationsparameter.
            1: Coordinate Frame Rotation
            2: Position Vector Transformation
            3: European Standard ISO 19111

aHelmert[7]  Sieben Helmert-Parameter in einem Array mit 7 Elementen des
            Typs double.
(ref out)   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.

aRotMat[3][3]  Rotationsmatrix der räumlichen Helmert Transformation in
(ref out)   einem Array aus 3 mal 3 Elementen des Typs double.
            -------------------
            |   1 |  w3 | -w2 |
            | -w3 |   1 |  w1 |
            |  w2 | -w1 |   1 |
            -------------------
            Die Vorzeichen von w können in Abhängigkeit von der
            Transformationsmethode wechseln. Für das Array muss Speicherplatz
            in der Größe 3*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] und aCartZ[][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 1 bis n
X:            Kartesische X-Komponente
Y:            Kartesische Y-Komponente
Z:            Kartesische 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.