Esempio n. 1
0
        private void RedrawFunction(FunctionToPlot fp)
        {
            var canvasWH = new Size(mCanvas.ActualWidth, mCanvas.ActualHeight);

            {
                // 線を引きます。
                var p = new Polyline();
                p.Stroke          = Brushes.DarkOrange;
                p.StrokeThickness = 1;
                p.FillRule        = FillRule.EvenOdd;

                var pc = new PointCollection();

                for (int i = 0; i <= canvasWH.Width; ++i)
                {
                    double x     = (double)i / canvasWH.Width;
                    double y     = fp(x);
                    double yDisp = canvasWH.Height / 2 - mScale * y * canvasWH.Height / 2;

                    pc.Add(new System.Windows.Point(i, yDisp));
                }

                p.Points = pc;
                mCanvas.Children.Add(p);
                mElements.Add(p);
            }

            {
                // 点を描きます。
                for (int i = 0; i <= NumGridX; ++i)
                {
                    double x     = (double)i / NumGridX;
                    double y     = fp(x);
                    double xDisp = x * canvasWH.Width;
                    double yDisp = canvasWH.Height / 2 - mScale * y * canvasWH.Height / 2;

                    AddCircle(new Vector(xDisp, yDisp), 5.0, Brushes.Black);
                }
            }
        }
Esempio n. 2
0
        public void Redraw(FunctionToPlot fp, string title)
        {
            var WH = new Size(mCanvas.ActualWidth, mCanvas.ActualHeight);

            mCanvas.Children.Clear();
            mElements.Clear();

            for (int i = 1; i < NumGridX; ++i)
            {
                AddLine(new Vector(i * WH.Width / NumGridX, 0), new Vector(i * WH.Width / NumGridX, WH.Height), Brushes.LightGray);
            }
            for (int i = 1; i < NumGridY; ++i)
            {
                AddLine(new Vector(0, i * WH.Height / NumGridY), new Vector(WH.Width, i * WH.Height / NumGridY), Brushes.LightGray);
            }

            AddLine(new Vector(0, WH.Height / 2), new Vector(WH.Width, WH.Height / 2), Brushes.Gray);
            AddLine(new Vector(0, 0), new Vector(0, WH.Height), Brushes.Gray);

            RedrawFunction(fp);

            AddTextBlock(new Vector(0, WH.Height / 2), 10, Brushes.Black, "0");
            for (int i = 1; i <= NumGridX; ++i)
            {
                double xOffs = 20;
                if (i == NumGridX)
                {
                    xOffs = 40;
                }
                AddTextBlock(new Vector(i * WH.Width / NumGridX - xOffs, WH.Height / 2), 10, Brushes.Black, string.Format("{0}/44100", i));
            }

            AddTextBlock(new Vector(WH.Width - 55, WH.Height / 2 + 20), 10, Brushes.Black, "Time(sec) →");
            AddTextBlockV(new Vector(0, 60), 10, Brushes.Black, "Amplitude →");
            AddTextBlock(new Vector(20, 12), 16, Brushes.Black, title);
        }