public void Smooth(IHandSkeleton skeleton) { var palmPosition = skeleton.PalmPosition; var previousAverage = CurrentAverage; if ((palmPosition - previousAverage).TwoNorm() > _jumpThreshold) { // filter jump - flush the queue and start over averaging _window.Clear(); _window.Enqueue(palmPosition); return; } _window.Enqueue(palmPosition); if (_window.Count > _windowSize) { _window.Dequeue(); } var currentAverage = CurrentAverage; SmoothedPositionChanged?.Invoke(this, new SmoothedPositionChangeEventArgs() { SmoothedPosition = currentAverage, SmoothedPositionDelta = currentAverage - previousAverage }); }
public void UpdatePosition(IHandSkeleton handSkeleton) { Dispatcher.Invoke(() => { var fingerPosition = handSkeleton.FingerPositions[this.Finger]; var deltaXSource = MaxX - MinX; var deltaXDest = (float)Canvas.ActualWidth; var xDest = (fingerPosition.X - MinX) * deltaXDest / deltaXSource; var deltaYSource = MaxY - MinY; var deltaYDest = (float)Canvas.ActualHeight; var yDest = (fingerPosition.Y - MinY) * deltaYDest / deltaYSource; Canvas.SetRight(UIElement, xDest); Canvas.SetTop(UIElement, yDest); }); }