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