Prototyp und Beschreibung der Funktion gettransoutliers

Funktion der freischaltpflichtigen Gruppe "Transformationsparameter")

 

gettransoutliers()
Berechnen der Ausreißer in einer Gruppe von identischen Punkten.

Prototyp der DLL-Funktion in C++ Syntax (Kleinschreibung beachten!):
extern "C" __declspec(dllimport) unsigned long __stdcall gettransoutliers(
     double aCartQ[][3],
     double aCartZ[][3],
     unsigned long nCount,
     double aOutlVal[],
     unsigned long aOutlNo[],
     unsigned long nOutlMax,
     unsigned long *nOutlCount,
     unsigned long lIndexC);

Prototyp der DLL-Funktion in Visual Objects Syntax:
_DLL function gettransoutliers(;
     aCartQ as real8 ptr,;                 // 4 Byte
     aCartZ as real8 ptr,;                 // 4 Byte
     nCount as dword,;                     // 4 Byte
     aOutlVal as real8 ptr,;               // 4 Byte  nOutlMax * sizeof(REAL8)
     aOutlNo as dword ptr,;                // 4 Byte  nOutlMax * sizeof(DWORD)
     nOutlMax as dword,;                   // 4 Byte
     nOutlCount ref dword,;                // 4 Byte
     lIndexC as logic);                    // 4 Byte
as logic pascal:geodll32.gettransoutliers  // 4 Byte


Die Funktion durchsucht zwei Arrays mit kartesischen XYZ-Koordinaten identischer
Punkte nach Ausreißern, die z.B. durch fehlerhafte Messungen oder fehlerhafter
Datenübertragung zustande gekommen sind. Die Außreißer mit einer Abweichung von
mehr als 50% vom Mittelwert werden im Array aOutlVal als Prozentangaben
zurückgegeben. Im Array aOutlNo werden die Indexe der Koordinaten in den Arrays
aCartQ und aCartZ eingetragen, die als Ausreißer erkannt worden sind. Die
erkannten Ausreißer können in den Koordinaten-Arrays korrigiert werden oder
daraus entfernt werden, um ein plausibles Ergebnis zu erhalten.

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.

aOutlVal[]  Ermittelte Ausreißer in einem eindimensionalen Array des Typs
(ref out)   double in Prozent der Abweichung vom Mittelwert.
            ---------------------------
            | V1 | V2 | V3 | ... | Vn |
            ---------------------------
            Für das Array muss Speicherplatz der Größe nOutlMax*sizeof(double)
            Bytes von der aufrufenden Routine zur Verfügung gestellt werden.

aOutlNo[]   Indexe der ermittelten Ausreißer innerhalb der Koordinaten-Arrays
(ref out)   aCartQ und aCartZ in einem eindimensionalen Array des Typs
            "unsigned long". Je nach dem Wert in lIndexC werden die Indexe mit
             Null für das erste Array-Element (C, C++, Pearl, usw.) oder mit
             Eins für das erste Array-Element (Visual Objects, FORTRAN, usw.)
             eingetragen.
            ---------------------------
            | N1 | N2 | N3 | ... | Nn |
            ---------------------------
            Für das Array muss Speicherplatz der Größe nOutlMax*sizeof(long)
            Bytes von der aufrufenden Routine zur Verfügung gestellt werden.

nOutlMax    Anzahl der maximal zu ermittelnden Ausreißer. Die Suche nach
            Ausreißern wird beendet, wenn die Anzahl nOutlMax erreicht ist. Wenn
            alle Ausreißer ermittelt werden sollen, ist es sinnvoll, hier den
            selben Wert wie im Argument nCount einzutragen.

nOutlCount  Die Funktion gibt die tatsächlich ermittelte Anzahl von Ausreißern
(ref)       in diesem Argument an die rufende Routine zurück.

lIndexC     Schalter für den Index des ersten Arrayelements in Abhängigkeit
            von der verwendeten Programmiersprache. Die Indexe im Array
            aOutlNo werden je nach Schalterstellung unterschiedlich
            eingetragen.
            TRUE: Index des ersten Arrayelements ist Null (C, C++, Pearl, usw.).
            (default)
            FALSE: Index des ersten Arrayelements ist Eins (Visual Objects,
            FORTRAN, usw.).

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.