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);
        }
Example #2
0
        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);
        }