2016-07-16 13 views
1

私はkinect SDKを使用してC#でアプリケーションを開発しています。今私は骨格を追跡するための疑いがあります。両方のスケルトントラッキング方法はkinectで正しいですか?

私は2つのコードを持っていますが、2つの異なるアプローチがあります。私は両方の方法が同じコンセプトにつながることを知りたいですか?違う?

コード1:

void Kinect_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) 
{ 
    using (SkeletonFrame frame = e.OpenSkeletonFrame()) 
    { 
     m_skeletons = new Skeleton[frame.SkeletonArrayLength]; 
     frame.CopySkeletonDataTo(m_skeletons); 
    } 

    if(m_skeletons != null && m_skeletons.Length != 0) 
    { 
     foreach (Skeleton skeleton in m_skeletons) 
     { 
      if (skeleton != null && skeleton.TrackingState == SkeletonTrackingState.Tracked) 
      { 
       //doing some operations 
      } 


      } 

     } 

} 

今のような他の追跡方法: コード2:

void Kinect_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) 
{ 
    using (SkeletonFrame frame = e.OpenSkeletonFrame()) 
    { 
     m_skeletons = new Skeleton[frame.SkeletonArrayLength]; 
     frame.CopySkeletonDataTo(m_skeletons); 
    } 

    if(m_skeletons != null && m_skeletons.Length != 0) 
    { 
     foreach (Skeleton skeleton in m_skeletons.Where(s => s.TrackingState == SkeletonTrackingState.Tracked)) 
      { 

       //doing some operations 
      } 

     } 

} 

両方foreach (Skeleton skeleton in m_skeletons)

foreach (Skeleton skeleton in m_skeletons.Where(s => s.TrackingState == SkeletonTrackingState.Tracked)) 

は正しいですか?違いはありますか?

答えて

1

どちらの方法も機能的に同等です。

.Where(s => s.TrackingState == SkeletonTrackingState.Tracked)は、すでにチェックを組み込んだ列挙子を作成します。したがって、foreachは、条件が成立する要素のみを反復処理します。もう1つの例では、これを明示的にifステートメントで実行します。

関連する問題