我在程序中接收到手的连续位置(带kinect),输出如下:
Hand position:838.64514
Hand position:840.4282
Hand position:852.3208
Hand position:866.03687
Hand position:893.8414
Hand position:921.6699
Hand position:945.2051
Hand position:972.0855
Hand position:1000.8606
Hand position:1025.4481
Hand position:1057.6517
Hand position:1084.9567
Hand position:1103.6124
Hand position:1129.9386
Hand position:1150.4238
Hand position:1165.6777
Hand position:1189.4777
Hand position:1209.6266
Hand position:1229.9663
Hand position:1243.3293
Hand position:1292.5873
Hand position:1277.4403
Hand position:1285.637
Hand position:1296.5696
Hand position:1281.771
Hand position:1348.9625
Hand position:1356.9446
Hand position:1357.5063
Hand position:1371.6934
Hand position:1357.644
Hand position:1363.991
Hand position:1346.6333
Hand position:1368.9194
Hand position:1319.148
Hand position:1309.4614
Hand position:1453.7458
Hand position:1293.8644
Hand position:1277.6212
Hand position:1266.6547
Hand position:1245.1154
Hand position:1233.5824
Hand position:1244.8787
Hand position:1227.302
Hand position:1211.7441
Hand position:1168.937
Hand position:1172.2562
Hand position:1141.3367
Hand position:1112.7675
Hand position:1079.6964
Hand position:1046.8102
Hand position:1002.8637
Hand position:966.8124
Hand position:1031.8394
Hand position:1041.4575
Hand position:969.2346
Hand position:857.4234
Hand position:845.1776
Hand position:828.65186
Hand position:829.81885
Hand position:835.6876
数字代表手的z位置。因此z约为800,然后它增长到大约1200,然后它又回到800.所有这些代表一个“Beat”或一个“击中”的手。我想检测这种变化。我开始编写类似这样的代码
if (position > oldPosition)
difference=difference+ position - oldPosition;
if (difference > 120)
println ( "One Hit");
difference=0;
oldPosition=position;
在我继续开发之前,我想确保这是一个很好的方法。你能告诉我是否有更好或更有效的方法吗?
答案 0 :(得分:0)
你需要确保println,差异赋值和oldPosition重新分配行都在for循环中(它们可能就是这个网站上的奇怪格式)
第二行也不应增加。差异将始终是位置 - OldPosition。无需添加它,只需在每次更新位置时重新评估它。
除此之外,它应该工作。当当前指针位置与初始位置相差120 z单位时,这只会打印出来。但是,我会确保您确定评估if(Math.abs(difference) > 120)
以允许负面差异。
答案 1 :(得分:0)
不要忘记括号,因为它们可能导致错误。如果方向很重要,最好不要使用绝对值。您可以在预先初始化difference
的函数中使用以下代码段。
final int HIT_THRESHOLD = 120; // this might change depending on the
// camera(kinect) angle, distance and environment
if (position != oldPosition) {
difference += (position - oldPosition); // make sure both sides have the
// same type for the equation
}
if (difference > HIT_THRESHOLD) { // here is where you check for direction if necessary
// you can do so by defining the threshold sign (-/+)
println ( "One Hit");
difference=0;
}
oldPosition=position;