Пример #1
0
 private void ComputeRawCoordinates(TrajectoryKinematics kinematics, List <TimedPoint> input, CalibrationHelper calibrationHelper)
 {
     for (int i = 0; i < input.Count; i++)
     {
         PointF point = calibrationHelper.GetPointAtTime(input[i].Point, input[i].T);
         kinematics.RawXs[i] = point.X;
         kinematics.RawYs[i] = point.Y;
         kinematics.Times[i] = input[i].T;
     }
 }
Пример #2
0
        /// <summary>
        /// Initialize the data and filter it if possible.
        /// </summary>
        public void Initialize(List <TimedPoint> samples, CalibrationHelper calibrationHelper)
        {
            this.Length = samples.Count;

            Times = new long[samples.Count];
            RawXs = new double[samples.Count];
            RawYs = new double[samples.Count];

            XCutoffIndex = -1;
            YCutoffIndex = -1;

            // Raw coordinates.
            for (int i = 0; i < samples.Count; i++)
            {
                PointF point = calibrationHelper.GetPointAtTime(samples[i].Point, samples[i].T);
                RawXs[i] = point.X;
                RawYs[i] = point.Y;
                Times[i] = samples[i].T;
            }

            this.CanFilter = PreferencesManager.PlayerPreferences.EnableFiltering && samples.Count > 10;
            if (this.CanFilter)
            {
                double framerate = calibrationHelper.CaptureFramesPerSecond;

                ButterworthFilter filter = new ButterworthFilter();

                // Filter the results a hundred times and store all data along with the best cutoff frequency.
                int tests = 100;
                int bestCutoffIndexX;
                FilterResultXs = filter.FilterSamples(RawXs, framerate, tests, out bestCutoffIndexX);
                XCutoffIndex   = bestCutoffIndexX;

                int bestCutoffIndexY;
                FilterResultYs = filter.FilterSamples(RawYs, framerate, tests, out bestCutoffIndexY);
                YCutoffIndex   = bestCutoffIndexY;
            }

            BestFitCircle = CircleFitter.Fit(this);
        }