Last active
December 14, 2015 00:39
-
-
Save abogartz/5000073 to your computer and use it in GitHub Desktop.
Averaging out Leap Motion frame positions to avoid jitter.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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