private async Task <AffineTransformationParameters> CalibrateAsync(CalibrationStyle style) { await _LoadTask.Task.ConfigureAwait(true); double margin = 50; List <Tuple <Point, Point> > measurements = new List <Tuple <Point, Point> > { new Tuple <Point, Point>(new Point(margin, margin), new Point()) //Top left }; if (style == CalibrationStyle.SevenPoint) { measurements.Add(new Tuple <Point, Point>(new Point(this.ActualWidth * .5, margin), new Point())); //Top center } measurements.Add(new Tuple <Point, Point>(new Point(this.ActualWidth - margin, margin), new Point())); //Top right measurements.Add(new Tuple <Point, Point>(new Point(this.ActualWidth - margin, this.ActualHeight - margin), new Point())); //Bottom right if (style == CalibrationStyle.SevenPoint) { measurements.Add(new Tuple <Point, Point>(new Point(this.ActualWidth * .5, this.ActualHeight - margin), new Point())); //Bottom center } measurements.Add(new Tuple <Point, Point>(new Point(margin, this.ActualHeight - margin), new Point())); //Bottom left if (style == CalibrationStyle.CornersAndCenter || style == CalibrationStyle.SevenPoint) { measurements.Add(new Tuple <Point, Point>(new Point(this.ActualWidth * .5, this.ActualHeight * .5), new Point())); //Center } for (int i = 0; i < measurements.Count; i++) { progress.Value = i * 100d / measurements.Count; var p = measurements[i].Item1; CalibrationMarker.RenderTransform = new TranslateTransform() { X = p.X, Y = p.Y }; var p1 = await GetRawTouchEventAsync().ConfigureAwait(true); measurements[i] = new Tuple <Point, Point>(p, p1); } var lsa = new LeastSquaresAdjustment(measurements.Select(t => t.Item1), measurements.Select(t => t.Item2)); return(lsa.GetTransformation()); }
public async Task <AffineTransformationParameters> CalibrateAsync(CalibrationStyle style) { await _loaded.Task; double margin = 50; List <Point> references = new List <Point>(); references.Add(new Point(margin, margin)); //Top left if (style == CalibrationStyle.SevenPoint) { references.Add(new Point(this.ActualWidth * .5, margin)); //Top center } references.Add(new Point(this.ActualWidth - margin, margin)); //Top right references.Add(new Point(this.ActualWidth - margin, this.ActualHeight - margin)); //Bottom right if (style == CalibrationStyle.SevenPoint) { references.Add(new Point(this.ActualWidth * .5, this.ActualHeight - margin)); //Bottom center } references.Add(new Point(margin, this.ActualHeight - margin)); //Bottom left if (style == CalibrationStyle.CornersAndCenter || style == CalibrationStyle.SevenPoint) { references.Add(new Point(this.ActualWidth * .5, this.ActualHeight * .5)); //Center } List <Point> measurements = new List <Point>(); foreach (var reference in references) { progress.Value = measurements.Count * 100d / references.Count; CalibrationMarker.RenderTransform = new TranslateTransform() { X = reference.X, Y = reference.Y }; var measurement = await GetRawTouchEventAsync(); measurements.Add(measurement); } return(LeastSquaresAdjustment.GetTransformation(references, measurements)); }