-> Hier kostenlos registrieren
Hallo zusammen,
ich bin grade dabei eine Funktion zu schreiben die mir aus meinen X und Z Werten die ich durch meinen Linienscanner erhalte die Breite und Höhe eines Paketes zu bestimmen. Ich denke wenn meine Werte Linear wären und nicht Springen/Unebenheiten da wären würde der Code denn ich geschrieben habe funktionieren. Jetzt habe ich mir aber die Frage gestellt wie man eine bessere Lösung schreiben würde wenn das ganze nicht mehr Linear ist und meine Werte rauschen würden wie auf dem Bild. Vielleicht hat ja jemand eine Idee/Tipp, mir fällt im Moment keine wirkliche Lösung dazu ein.
Vielen Dank schon mal

ich bin grade dabei eine Funktion zu schreiben die mir aus meinen X und Z Werten die ich durch meinen Linienscanner erhalte die Breite und Höhe eines Paketes zu bestimmen. Ich denke wenn meine Werte Linear wären und nicht Springen/Unebenheiten da wären würde der Code denn ich geschrieben habe funktionieren. Jetzt habe ich mir aber die Frage gestellt wie man eine bessere Lösung schreiben würde wenn das ganze nicht mehr Linear ist und meine Werte rauschen würden wie auf dem Bild. Vielleicht hat ja jemand eine Idee/Tipp, mir fällt im Moment keine wirkliche Lösung dazu ein.
Vielen Dank schon mal
Code:
#n := 0;
#Anfang_max := FALSE;
#Anfang_steigung := FALSE;
#merke_pos_anfang := 0;
#merke_pos_ende := 0;
WHILE #n < #Nutzdaten-1 DO
IF "Datenpaket_Z_X".Messdaten.Z_Kordinaten[#n] = "Datenpaket_Z_X".Messdaten.Z_Kordinaten[#n + 1] AND NOT #Anfang_steigung THEN // "0 Punkt" ignorieren
#n += 1;
ELSIF "Datenpaket_Z_X".Messdaten.Z_Kordinaten[#n] < "Datenpaket_Z_X".Messdaten.Z_Kordinaten[#n + 1] AND NOT #Anfang_max THEN //Steigung fängt an
#n += 1;
#Anfang_steigung := TRUE;
ELSIF #Anfang_steigung THEN // Anfang gefunden
#max_z := "Datenpaket_Z_X".Messdaten.Z_Kordinaten[#n];
#merke_pos_anfang := #n;
#Anfang_max := TRUE;
ELSIF "Datenpaket_Z_X".Messdaten.Z_Kordinaten[#n] <= "Datenpaket_Z_X".Messdaten.Z_Kordinaten[#n + 1] AND #Anfang_max THEN // Nach ENDE des Paketes suchen
#n += 1;
ELSE //Ende gefunden
#merke_pos_ende := #n;
#Paket_Breite := "Datenpaket_Z_X".Messdaten.X_Kordinaten[#merke_pos_ende] - "Datenpaket_Z_X".Messdaten.X_Kordinaten[#merke_pos_anfang];
#Paket_hoehe := #max_z - "Datenpaket_Z_X".Messdaten.Z_Kordinaten[0]; // Wenn das Paket natürlich genau am Rand liegt also am Anfang stimmt dies nicht mehr
EXIT;
END_IF;
END_WHILE;
//DB wird geleert
FOR #n := 0 TO #Nutzdaten-1 DO
"Datenpaket_Z_X".Messdaten.Z_Kordinaten[#n] := 0;
"Datenpaket_Z_X".Messdaten.X_Kordinaten[#n] := 0;
END_FOR;

Zuletzt bearbeitet: