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; } }
/// <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); }