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
            });
        }
Esempio n. 2
0
        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);
            });
        }