2016-07-01 3 views
0

私はkinectジェスチャーアプリケーションを開発しています。だから私はジェスチャーを手渡すためにインターネットからコードを得た。Kinectスケルトン軸寸法の測定方法は?

handupgesture() 
{ 

bool up = false; 
float refDistance = 0.2F; 

SkeletonPoint refPos = localSkeletonHistory[0].Joints[JointType.ShoulderCenter].Position; 
SkeletonPoint startPos = localSkeletonHistory[0].Joints[JointType.HandRight].Position; 

for (int i = 20; i < localSkeletonHistory.Count; i++) 
{ 
      if (!(Math.Abs(localSkeletonHistory[i].Joints[JointType.ShoulderCenter].Position.Y - refPos.Y) < 0.05F && 
        Math.Abs(localSkeletonHistory[i].Joints[JointType.HandRight].Position.X - startPos.X) < 0.05F && 
        Math.Abs(localSkeletonHistory[i].Joints[JointType.HandRight].Position.Z - startPos.Z) < 0.05F)) 
      { 
       break; 
      } 
      if (localSkeletonHistory[i].Joints[JointType.HandRight].Position.Y >= (startPos.Y + refDistance)) 
      { 
       up = true; 
       SkeletonHistory.Clear(); 
       break; 
      } 
     } 
     return up; 
} 

私の疑問は、次のとおりです。

  • 0.05Fは何?それはメートルですか?センチメートル ?
  • Z軸距離は、キネクト距離から関節の距離を意味します。それは...ですか ?

このコードは、手のアップを検出していません。間違いや提案はありますか? C#

答えて

1

0.05Fは、フロート数を意味します。

フロートキーワードは、32ビット 浮動小数点値を格納する単純型を意味します。次の表は、float型の精度と の近似範囲を示しています。デフォルトでは

、代入演算子 の右側の実数値リテラルはdoubleとして扱われます。

float x = 3.5F; or in your case 0.05F 

ソース:あなたの2番目の質問、z軸としてhttps://msdn.microsoft.com/en-us/library/b1e65aza.aspx

は深さを表しをしたがって、次の例のように、接尾辞FまたはFを使用して、フロート 変数を初期化します。 各フレーム、キャプチャされた奥行き画像は、Kinectランタイムによってスケルトンデータに処理されます。スケルトンデータには、深度センサに表示される最大2人の人間の骨格の3D位置データが含まれています。スケルトンの位置と各スケルトンジョイント(アクティブなトラッキングが有効な場合)は(x、y、z)座標として格納されます。奥行き空間とは異なり、スケルトン空間座標はメートルで表されます。以下に示すように

x、y及びz軸は深さセンサの本体軸である:

Skeleton space

これはと原点にオンラインショップを配置右手座標系であります正のz軸は、Kinectが指し示される方向に延びる。正のy軸は上に伸び、正のx軸は左に伸びる。

出典:あなたの最後の質問についてはhttps://msdn.microsoft.com/en-us/library/hh973078.aspx

- 0.5F許容度を減らすためにしてみてください。

また、私は、WindowsのKinectサイトでいくつかの例のためにあなたをポイントしたいと思います: https://kinectforwindows.codeplex.com/

関連する問題