2017-12-25 1 views
0

Ich berechne die Entfernung eines Objekts.Analysieren der Objektposition mit C# generische Liste

Die X- und Y-Positionswert zuerst in zwei verschiedenen Listen X und W. gespeicherten

Dann verwende ich eine andere Liste für den Abstand von diesem Objekt abgedeckt speichert. Außerdem aktualisiere ich die Listen, wenn ihre Anzahl 10 erreicht, um Speicherbelastung zu vermeiden.

Auf der Grundlage der Abstandswert muss ich analysieren, ob das Objekt in der statischen Position der Abstand nicht erhöht werden soll. Und auf der Textbox-Anzeige scheinen die berechneten Entfernungswerte statisch zu sein.

Eigentlich verwende ich Sensoren, um die Entfernung zu berechnen. Und aufgrund des Sensorfehlers variiert der Abstandswert, selbst wenn sich das Objekt im statischen Zustand befindet. Die Sensorfehlerschwelle liegt bei ca. 15cm.

ich die Logik entwickelt haben, jedoch erhalte ich Fehler:

System.ArgumentOutOfRangeException : 'Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index'

Mein Code ist wie folgt:

void distance() 
    { 
     List<double> d = new List<double>(); 
     double sum = 0, sum1 = 0; 

     for (int i = 1; i < X.Count; i++) 
     {   
      //distance computation 

       if ((d[i] - d[i -1]) > 0.15) 
       { 
       sum1 = d.Sum(); 
       sum = sum1 + dis1; 
       Dis = Math.Round(sum, 3); 
       } 
      } 
      // refresh the Lists when X, W and d List reach the count of 10     
    }    
    } 
+1

Was ist 'X' in Ihrem Code? Eine andere Liste? –

+1

Was ist 'W' in deinem Code? Eine andere Liste? – HudsonPH

+0

ja X und W sind weitere Listen enthalten X- und Y-Achsen-Positionswert – SN25

Antwort

1

Sie tun es völlig falsch. Stellen Sie sich eine Methode vor, die eine Entfernung für zwei gegebene Punkte berechnet. Das wird eine Funktion der Unterschrift sein double -> double -> double oder, wenn Sie C# bevorzugen, double ComputeDistance(double startPoint, double endPoint).

Dann ist das einzige, was zu tun ist, eine solche Funktion auf jedes Punktepaar anzuwenden, das Sie bekommen haben. Der einfachste und kompakteste Weg, dies zu erreichen, ist mittels Linq. Es könnte auch in einem normalen foreach getan werden.

Nehmen Sie eine Notiz, dass es eine Art und Weise klarer sein würde, wenn Sie schließlich Ihre getrennte Listen in einer einzigen Liste zusammenführen. Tuple<double, double> scheint die beste Wahl einschließlich der Leistung zu sein.

Verwandte Themen