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());
        }
Exemplo n.º 2
0
        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));
        }