/// <summary> /// find which line segment our x fits into /// </summary> /// <param name="x"></param> /// <returns></returns> public float GetOutput(float x) { var target = 0; if (x < XPoints[0]) { return(YPoints[0]); } if (x > XPoints.Last()) { return(YPoints.Last()); } for (var counter = 0; counter < XPoints.Length; counter++) { if (x < XPoints[counter]) { target = counter; break; } if (Math.Abs(x - XPoints[counter]) < Tolerance) { return(YPoints[counter]); } } var a = YPoints[target] - YPoints[target - 1]; //y2-y1 var b = XPoints[target] - XPoints[target - 1]; //x2-x1 var m = a / b; //slope var intercept = YPoints[target] - m * XPoints[target]; //b return(m * x + intercept); }
public virtual async void MenuSwipe(object sender, PanUpdatedEventArgs e) { double totalLeftX = 0; double totalRightX = 0; if (e.StatusType == GestureStatus.Running || e.StatusType == GestureStatus.Started) { XPoints.Add(e.TotalX); totalLeftX = -1 * MasterStack.TranslationX / 1.5 + 100 + e.TotalX; totalRightX = MasterStack.TranslationX / 1.5 + 100 + e.TotalX; if (totalLeftX < -700 || totalRightX > 700 || e.TotalX.Equals(0)) { return; } if (e.TotalX < 0) { MasterStack.IsVisible = true; await MasterStack.LayoutTo( new Rectangle(-1 * MasterStack.TranslationX / 1.5 + 100 + e.TotalX, 0, 600, 600), 250U, Easing.SinOut); XPoints.RemoveAll(x => x > 0); IsMasterDisplayed = true; } else { MasterStack.IsVisible = true; await MasterStack.LayoutTo( new Rectangle(MasterStack.TranslationX / 2 + 100 + e.TotalX, 0, 600, 600), 250U, Easing.SinOut); XPoints.RemoveAll(x => x < 0); IsMasterDisplayed = true; } return; } if (e.StatusType == GestureStatus.Completed) { if (IsMasterDisplayed) { MasterStack.IsVisible = true; await MasterStack.LayoutTo(new Rectangle(100 - MasterStack.TranslationX, 0, 600, 600), 250U, Easing.SinOut); XPoints.Clear(); IsMasterDisplayed = true; } else { MasterStack.IsVisible = false; await MasterStack.LayoutTo(new Rectangle(MasterStack.TranslationX - 100, 0, 600, 600), 250U, Easing.SinOut); XPoints.Clear(); IsMasterDisplayed = false; } } }
private void CalculateMinPoints() { XMin = XPoints.Min(); YMin = YPoints.Min(); ZMin = ZPoints.Min(); }
private void CalculateMaxPoints() { XMax = XPoints.Max(); YMax = YPoints.Max(); ZMax = ZPoints.Max(); }