public void ShowData(string label, Color c, double[] t, double[] s) { Analyzer.RunningCount Counter = new Analyzer.RunningCount(AnalysisMetric.Invalid); for (int i = 0; i < s.Length; i++) { Counter.Add(s[i]); } mZedGraphControl.GraphPane.AddCurve(label, t, s, c, SymbolType.None); using (Graphics g = mZedGraphControl.CreateGraphics()) { //scale the XY axis appropriately mZedGraphControl.GraphPane.XAxis.Scale.PickScale(mZedGraphControl.GraphPane, g, mZedGraphControl.GraphPane.CalcScaleFactor()); mZedGraphControl.GraphPane.YAxis.Scale.PickScale(mZedGraphControl.GraphPane, g, mZedGraphControl.GraphPane.CalcScaleFactor()); } //refresh the scaling so we can use it later... mZedGraphControl.AxisChange(); mZedGraphControl.Refresh(); //draw a box for the first standard deviation BoxObj StdBox = new BoxObj( mZedGraphControl.GraphPane.XAxis.Scale.Min, Counter.Mean + Counter.StdDev, mZedGraphControl.GraphPane.XAxis.Scale.Max - mZedGraphControl.GraphPane.XAxis.Scale.Min, 2 * Counter.StdDev, Color.Empty, Color.FromArgb(150, Color.LightGreen)); StdBox.IsClippedToChartRect = true; StdBox.ZOrder = ZOrder.E_BehindCurves; mZedGraphControl.GraphPane.GraphObjList.Add(StdBox); //add the box //draw a box for the second standard deviation StdBox = new BoxObj( mZedGraphControl.GraphPane.XAxis.Scale.Min, Counter.Mean + 2 * Counter.StdDev, mZedGraphControl.GraphPane.XAxis.Scale.Max - mZedGraphControl.GraphPane.XAxis.Scale.Min, Counter.StdDev, Color.Empty, Color.FromArgb(150, Color.LightBlue)); StdBox.IsClippedToChartRect = true; StdBox.ZOrder = ZOrder.E_BehindCurves; mZedGraphControl.GraphPane.GraphObjList.Add(StdBox); //add the box //draw a box for the second standard deviation StdBox = new BoxObj( mZedGraphControl.GraphPane.XAxis.Scale.Min, Counter.Mean - Counter.StdDev, mZedGraphControl.GraphPane.XAxis.Scale.Max - mZedGraphControl.GraphPane.XAxis.Scale.Min, Counter.StdDev, Color.Empty, Color.FromArgb(150, Color.LightBlue)); StdBox.IsClippedToChartRect = true; StdBox.ZOrder = ZOrder.E_BehindCurves; mZedGraphControl.GraphPane.GraphObjList.Add(StdBox); //add the box //draw a line for the mean value LineObj MeanLine = new LineObj( mZedGraphControl.GraphPane.XAxis.Scale.Min, Counter.Mean, mZedGraphControl.GraphPane.XAxis.Scale.Max, Counter.Mean); MeanLine.Line.Style = System.Drawing.Drawing2D.DashStyle.Dash; MeanLine.IsClippedToChartRect = true; mZedGraphControl.GraphPane.GraphObjList.Add(MeanLine); //add the line //draw a label for the mean value TextObj MeanLabel = new TextObj( "Mean", mZedGraphControl.GraphPane.XAxis.Scale.Min, Counter.Mean, CoordType.AxisXYScale, AlignH.Left, AlignV.Bottom); MeanLabel.FontSpec.Fill.IsVisible = false; MeanLabel.FontSpec.Border.IsVisible = false; MeanLabel.FontSpec.IsBold = true; MeanLabel.FontSpec.IsItalic = true; mZedGraphControl.GraphPane.GraphObjList.Add(MeanLabel); //add the label mZedGraphControl.AxisChange(); mZedGraphControl.Refresh(); }
private void ShowPolarAnalysis( AnalysisMetric metric, List <double> t, List <double> b, List <double> x, List <double> y, List <double> p) { Analyzer.RunningCount XCounter = new Analyzer.RunningCount(AnalysisMetric.Invalid), YCounter = new Analyzer.RunningCount(AnalysisMetric.Invalid); for (int i = 0; i < t.Count; i++) { XCounter.Add(x[i]); YCounter.Add(y[i]); } double XMean = XCounter.Mean, YMean = YCounter.Mean; List <double> Rho = new List <double>(t.Count), Theta = new List <double>(t.Count), VelTan = new List <double>(t.Count); for (int i = 0; i < t.Count; i++) { double XCentered = x[i] - XMean, YCentered = y[i] - YMean; Theta.Add(Math.Atan(YCentered / XCentered)); Rho.Add(new Analyzer.Vector2(XCentered, YCentered).Norm()); VelTan.Add(Theta[i] * Rho[i]); } switch (metric) { case AnalysisMetric.Rho: ShowAnalysis(metric, t, b, Rho, 0, StandardUnits.Distance); break; case AnalysisMetric.Theta: ShowAnalysis(metric, t, b, Theta, 0, StandardUnits.Angle); break; case AnalysisMetric.VelocityRho: ShowAnalysis(metric, t, b, Rho, 1, StandardUnits.Distance.TimeDerivative(1)); break; case AnalysisMetric.VelocityTheta: ShowAnalysis(metric, t, b, Theta, 1, StandardUnits.Angle.TimeDerivative(1)); break; case AnalysisMetric.VelocityTangent: ShowAnalysis(metric, t, b, VelTan, 0, StandardUnits.Distance.TimeDerivative(1)); break; case AnalysisMetric.AccelerationRho: ShowAnalysis(metric, t, b, Rho, 2, StandardUnits.Distance.TimeDerivative(2)); break; case AnalysisMetric.AccelerationTheta: ShowAnalysis(metric, t, b, Theta, 2, StandardUnits.Angle.TimeDerivative(2)); break; case AnalysisMetric.AccelerationTangent: ShowAnalysis(metric, t, b, VelTan, 1, StandardUnits.Distance.TimeDerivative(2)); break; default: throw new NotSupportedException(); } }