2016-07-16 6 views
1

kinect SDK를 사용하여 C#에서 응용 프로그램을 개발했습니다. 이제 나는 골격 추적에 의문을 가지고 있습니다.스켈레톤 추적 방법은 모두 kinect에서 정확합니까?

코드가 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은 조건이 만족하는 요소 만 반복합니다. 다른 예에서는 if 문을 사용하여이 작업을 명시 적으로 수행합니다.