private Trajectory readTrajectory(string inputFileName, out GaitFile file) { var input = (EinputMode)Enum.Parse(typeof(EinputMode), ConfigurationManager.AppSettings["inputMode"], true); var projection = (EprojectionMode)Enum.Parse(typeof(EprojectionMode), ConfigurationManager.AppSettings["projectionMode"], true); file = new GaitFile(); Trajectory trajectory = new Trajectory(); Frame fr; file.ReadFile(inputFileName); trajectory.points = new List <Point>(); long frameNum = -1; while ((fr = file.GetNextFrame(frameNum)) != null) { trajectory.add(fr); frameNum = fr.FrameNumber; } if (projection == EprojectionMode.ground) { trajectory.rotateTrajectory(); } trajectory.samplingRate = (input == EinputMode.wii) ? 100 : 30; return(trajectory); }
public Trajectory removeLinearPath() { if (points == null || !points.Any()) { return(this); } var tOffset = points[0].timeStamp; double xt = 0, zt = 0, tt = 0, meanX = 0, meanT = 0, meanZ = 0; foreach (var p in points) { var t = p.timeStamp - tOffset; xt += t * p.x; zt += t * p.z; tt += t * t; meanX += p.x; meanZ += p.z; meanT += t; } var n = points.Count; xt /= n; zt /= n; tt /= n; meanX /= n; meanT /= n; meanZ /= n; double factor = 0; if (tt - meanT * meanT != 0) { factor = 1.0 / (tt - meanT * meanT); } double slopeX = (xt - meanX * meanT) * factor; double slopeZ = (zt - meanZ * meanT) * factor; double offsetX = meanX - slopeX * meanT; double offsetZ = meanZ - slopeZ * meanT; Trajectory segment = new Trajectory(); segment.samplingRate = samplingRate; foreach (var p in points) { Point p1 = new Point(); var t = p.timeStamp - tOffset; p1.timeStamp = p.timeStamp; p1.x = p.x - offsetX - slopeX * t; p1.z = p.z - offsetZ - slopeZ * t; segment.add(p1); } return(segment); }