public double DistanceTo(Gesture other) { double[] current = new double[other.Count]; double[] previous = new double[other.Count]; current[0] = 2 * localDist(data[0], other.data[0]); for (int j = 1; j < other.Count; j++) current[j] = current[j - 1] + localDist(data[0], other.data[j]); for (int i = 1; i < data.Count; i++) { { double[] aux = current; current = previous; previous = aux; } current[0] = previous[0] + localDist(data[i], other.data[0]); for (int j = 1; j < other.data.Count; j++) { double d = localDist(data[i], other.data[j]); current[j] = Math.Min(Math.Min(current[j - 1], previous[j]), previous[j - 1] + d) + d; } } return current[other.data.Count - 1] / (data.Count + other.data.Count); }
public void OnGestureCaptured(Gesture gesture) { if (Prototypes.Count == 0) return; double mindist = double.MaxValue; Gesture bestGesture = null; foreach (var g in Prototypes) { double distance = gesture.DistanceTo(g); if (distance < mindist) { mindist = distance; bestGesture = g; } } if (GestureRecognized != null) GestureRecognized(bestGesture.Name); }
public void OnWiimoteChanged(WiimoteState state) { bool buttonBpressed = state.ButtonState.B; Point3F sample = state.AccelState.Values; if (buttonBpressedOld) { if (buttonBpressed) gesture.AddSample(new double[] { sample.X, sample.Y, sample.Z }); else if (GestureCaptured != null) GestureCaptured(gesture); } else { if (buttonBpressed) gesture = new Gesture(); else ; //Nada } buttonBpressedOld = buttonBpressed; }
public void AddPrototype(Gesture gesture) { Prototypes.Add(gesture); }
void gc_GestureCaptured(Gesture gesture) { gestureRecognizer.OnGestureCaptured(gesture); }