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); }
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); }