private T nudge(VectorLike <T> inputVal, VectorLike <T> targetVal, double?sigma = null, double strength = 1.0) { VectorLike <T> nudgeVector = targetVal - inputVal; var Sigma = sigma ?? (Math.Max(targetVal.Length, inputVal.Length) * hintToleranceFactor); var zScore = nudgeVector.Length / Sigma; zScore = (zScore < -hintToleranceFactor) ? zScore + hintToleranceFactor : (zScore > hintToleranceFactor) ? zScore - hintToleranceFactor : 0.0; var amount = strength * Math.Min(1.0, zScore); return((T)(inputVal + amount * nudgeVector)); }
public void CalculateRaw() { VectorLike <T> V = (VectorLike <T>)initialVelocity; VectorLike <T> D = default(VectorLike <T>); //TimeSpan T = TimeSpan.Zero; foreach (VectorAndTime <T> A in rawAs.Skip(1)) { V += (VectorLike <T>)(A.V) * (float)A.t.TotalSeconds; rawVs.Add(new VectorAndTime <T>((T)V, A.t)); D += V * (float)A.t.TotalSeconds; rawDs.Add(new VectorAndTime <T>((T)D, A.t)); //T += A.t; } }