Пример #1
0
        public static Vector2D CalculateTransform(TransformState state, TransformType type)
        {
            var blobs  = state.Blobs;
            var pBlobs = state.PBlobs;

            if (pBlobs.Count() != blobs.Count())
            {
                return(new Vector2D());
            }

            var value  = new Vector2D();
            var pValue = new Vector2D();
            var delta  = new Vector2D();

            switch (type)
            {
            case TransformType.Scale:
                if (blobs.Count() < 2)
                {
                    Debug.WriteLine("[WARNING] Scale state have less than 2 fingers");
                    return(new Vector2D());
                }
                value.x  = value.y = VMath.Dist(blobs.First().Position, blobs.Last().Position);
                pValue.x = pValue.y = VMath.Dist(pBlobs.First().Position, pBlobs.Last().Position);
                delta    = value - pValue;
                //Debug.WriteLine(blobs.Count());
                break;

            case TransformType.Rotate:
                if (blobs.Count() < 2)
                {
                    //Debug.WriteLine("[WARNING] Rotate state have less than 2 fingers");
                    return(new Vector2D());
                }

                value.x  = value.y = FindAngle(blobs.First(), blobs.Last());
                pValue.x = pValue.y = FindAngle(pBlobs.First(), pBlobs.Last());
                delta.x  = delta.y = SubtractCycles(value.x, pValue.x);
                break;

            case TransformType.Translate:
                value  = FindCentroid(blobs);
                pValue = FindCentroid(pBlobs);
                delta  = value - pValue;
                break;
            }

            if (Math.Abs(delta.x) > 0.1 || Math.Abs(delta.y) > 0.1)
            {
                delta = new Vector2D();
            }

            return(delta);
            //return delta.LinearEasing(pDelta);
        }
Пример #2
0
        public static Vector2D CalculateTransform(TransformState state, TransformType type)
        {
            var blobs = state.Blobs;
            var pBlobs = state.PBlobs;

            if (pBlobs.Count() != blobs.Count())
            {
                return new Vector2D();
            }

            var value = new Vector2D();
            var pValue = new Vector2D();
            var delta = new Vector2D();

            switch (type)
            {
                case TransformType.Scale:
                    if (blobs.Count() < 2)
                    {
                        Debug.WriteLine("[WARNING] Scale state have less than 2 fingers");
                        return new Vector2D();
                    }
                    value.x = value.y = VMath.Dist(blobs.First().Position, blobs.Last().Position);
                    pValue.x = pValue.y = VMath.Dist(pBlobs.First().Position, pBlobs.Last().Position);
                    delta = value - pValue;
                    //Debug.WriteLine(blobs.Count());
                    break;
                case TransformType.Rotate:
                    if (blobs.Count() < 2)
                    {
                        //Debug.WriteLine("[WARNING] Rotate state have less than 2 fingers");
                        return new Vector2D();
                    }

                    value.x = value.y = FindAngle(blobs.First(), blobs.Last());
                    pValue.x = pValue.y = FindAngle(pBlobs.First(), pBlobs.Last());
                    delta.x = delta.y = SubtractCycles(value.x, pValue.x);
                    break;
                case TransformType.Translate:
                    value = FindCentroid(blobs);
                    pValue = FindCentroid(pBlobs);
                    delta = value - pValue;
                    break;
            }

            //TODO:Check if Min Max needed
            //if (Math.Abs(delta.x) > 0.1 || Math.Abs(delta.y) > 0.1) delta = new Vector2D();

            return delta;
            //return delta.LinearEasing(pDelta);
        }