Hallo,
und vielen Dank für Eure Antworten.
Da ich nicht gerade das riesige Mathegenie bin habe ich es doch mit einer automtischen Suche gemacht.
Begrenzt durch maximale Suchdurchgänge und dem Abgleich der Abweichung der berechneten Radien von den Zielradien lassen sich auch ganz gut Falsche Eingangswerte erkennen. Die Zeit ist durch eine dynamische Schrittanpassung auch nicht so lang wie ich dachte.
Habe mein Excel Testprgramm und den Code mal angehangen.
Vielen Dank für Eure hilfe.
US-GPS.zipCode:Option Explicit Dim P(5) As Double Dim S1(5) As Double Dim S2(5) As Double Dim S3(5) As Double Sub GetGPSPos() Dim iStepCount As Integer Dim iStepLimit As Integer Dim iStep As Integer Dim i As Integer Dim dError As Double Dim dTolerance As Double Dim Mybook As Workbook Dim MySheet As Worksheet Dim StartTime As Date Dim EndTime As Date 'Zeitmessung StartTime = Timer 'Excelwerte holen Set Mybook = ActiveWorkbook Set MySheet = Mybook.ActiveSheet For i = 0 To 3 S1(i) = MySheet.Cells(2, i + 2) S2(i) = MySheet.Cells(3, i + 2) S3(i) = MySheet.Cells(4, i + 2) P(i) = 0 Next 'Grenzen festlegen dTolerance = 1 'benötigte Toleranz iStepCount = 0 'Durchlaufzähler rücksetzen iStepLimit = 1000 'Durchlaufgrenze festlegen Do 'Durchlaeufe zählen iStepCount = iStepCount + 1 'Gesamtabweichung berechnen dError = GetError 'Schritt festlegen iStep = Fix(dError / 3) If iStep = 0 Then iStep = 1 End If 'X-Check P(0) = P(0) + iStep If GetError > dError Then P(0) = P(0) - (2 * iStep) If GetError > dError Then P(0) = P(0) + iStep End If End If 'Y-Check P(1) = P(1) + iStep If GetError > dError Then P(1) = P(1) - (2 * iStep) If GetError > dError Then P(1) = P(1) + iStep End If End If 'Z-Check P(2) = P(2) + iStep If GetError > dError Then P(2) = P(2) - (2 * iStep) If GetError > dError Then P(2) = P(2) + iStep End If End If 'Ergebnis prüfen If dError < dTolerance Or iStepCount >= iStepLimit Then 'Zeitmessung ende EndTime = Timer 'Werte Ausgeben MySheet.Cells(5, 2) = P(0) MySheet.Cells(5, 3) = P(1) MySheet.Cells(5, 4) = P(2) MySheet.Cells(5, 6) = dError MySheet.Cells(5, 7) = iStep MySheet.Cells(5, 8) = iStepCount MySheet.Cells(5, 9) = Format(EndTime - StartTime, "0.0") 'Schleife beenden Exit Do End If Loop End Sub 'Distanz berechnen Function GetR(P1() As Double, P2() As Double) As Double GetR = Sqr(((P1(0) - P2(0))) ^ 2 + ((P1(1) - P2(1))) ^ 2 + ((P1(2) - P2(2))) ^ 2) End Function Function GetError() As Double 'Distanz berechnen S1(4) = GetR(S1, P) S2(4) = GetR(S2, P) S3(4) = GetR(S3, P) 'Abweichung berechnen S1(5) = S1(4) - S1(3) S2(5) = S2(4) - S2(3) S3(5) = S3(4) - S3(3) 'Gesamtabweichung berechnen GetError = Abs(S1(5)) + Abs(S2(5)) + Abs(S3(5)) End Function







Zitieren


Lesezeichen