Skip to content

Instantly share code, notes, and snippets.

@abogartz
Last active December 14, 2015 00:39
Show Gist options
  • Save abogartz/5000073 to your computer and use it in GitHub Desktop.
Save abogartz/5000073 to your computer and use it in GitHub Desktop.
Averaging out Leap Motion frame positions to avoid jitter.
public function averageFrames(frame:Frame):void {
if (!frame.isValid()) {
trace("invalid frame")
return;
}
if (!frame.hands[0].isValid() || !frame.hands[1].isValid()) {
trace("invalid hand")
return;
}
//figure which hand is leftmost?
var leftIndex:int=(frame.hands[0].palmPosition.x < frame.hands[1].palmPosition.x) ? 0 : 1;
var rightIndex:int=leftIndex == 1 ? 0 : 1;
//push hands into vector based on location
framesReceived.push(new <Hand>[frame.hands[leftIndex], frame.hands[rightIndex]]);
var len:int=framesReceived.length;
if (len > 30) {
framesReceived.shift();
len--;
}
var ax:Number=0;
var ay:Number=0;
var az:Number=0;
var ap:Number = 0;
var i:int;
//average left hand position
for (i=0; i < len; i++) {
ax+=framesReceived[i][0].palmPosition.x;
ay+=framesReceived[i][0].palmPosition.y;
az+=framesReceived[i][0].palmPosition.z;
ap+=framesReceived[i][0].direction.pitch;
}
frameData.leftHand.x=(ax / len);
frameData.leftHand.y=(ay / len);
frameData.leftHand.z=(az / len);
frameData.leftPitch=(ap/len);
//average right hand position
ax=0;
ay = 0;
az = 0;
ap=0;
for (i=0; i < len; i++) {
ax+=framesReceived[i][1].palmPosition.x;
ay+=framesReceived[i][1].palmPosition.y;
az+=framesReceived[i][1].palmPosition.z;
ap+=framesReceived[i][0].direction.pitch;
}
frameData.rightHand.x=(ax / len);
frameData.rightHand.y=(ay / len);
frameData.rightHand.z=(az / len);
frameData.rightPitch=(ap/len);
}
}
import flash.geom.Vector3D;
class FrameData {
public var leftHand:Vector3D=new Vector3D();
public var rightHand:Vector3D=new Vector3D();
public var rightPitch:Number;
public var leftPitch:Number;
public function FrameData() {
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment