2017-12-25 8 views
0

私はオブジェクトの距離を計算しています。C#ジェネリックリストを使用してオブジェクトの位置を分析する

最初の二つの異なるリストXに格納されたX及びY位置値及びW.

そして私は、このオブジェクトによってカバーされる距離を記憶するための別のリストを使用します。また、メモリの負担を避けるために、カウントが10に達するとリストをリフレッシュします。

距離値に基づいて、オブジェクトが静的位置にある場合、距離を増やすべきではないと分析しなければなりません。また、テキストボックスの表示では、計算された距離値は静的であるように見えます。

実際、私はセンサーを使って距離を計算しています。物体が静的状態であってもセンサ誤差のため距離値は変化する。センサの誤差閾値は約15cmである。私は、ロジックを開発した

は、しかし、私はエラーが表示されます。次のように

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

私のコードは次のとおりです。

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

あなたのコードで 'X'とは何ですか?別のリスト? –

+1

あなたのコードに 'W'とは何ですか?別のリスト? – HudsonPH

+0

はいXとWは別のリストで、X軸とY軸の位置値を含んでいます – SN25

答えて

1

あなたはそれは完全に間違ってません。与えられた2点の距離を計算する方法を考えてみましょう。それは署名double -> double -> doubleのファンクションになるか、C#を好む場合はdouble ComputeDistance(double startPoint, double endPoint)です。

次に、あなたが持っているポイントのペアごとにそのような方法を適用するだけです。これを達成する最も簡単でコンパクトな方法は、Linqです。それは通常のforeachで行うこともできます。

最終的に分割リストを単一のリストにマージすると、より明確になることに注意してください。 Tuple<double, double>はパフォーマンスを含めた最良の選択です。

関連する問題