예제 #1
0
        private void SplineForm_Paint(object sender, PaintEventArgs e)
        {
            // BSplineクラスの生成
            Spline = new BSpline(cxs.ToArray(), cys.ToArray());
            var ts = Enumerable.Range(0, 100).Select(t => t / 100.0).ToArray();

            Spline.Interpolate(ts, out xs, out ys);
            Graphics g = e.Graphics;

            for (int i = 0; i < xs.Length; i += 2)
            {
                Point p  = new Point((int)xs[i], (int)ys[i]);
                Point pp = new Point((int)xs[i + 1], (int)ys[i + 1]);
                g.DrawLine(pen, TranslatePos(p), TranslatePos(pp));
            }
            g.DrawLine(pen, TranslatePos(new Point(0, 0)), TranslatePos(new Point(100, 0)));
            g.DrawLine(pen, TranslatePos(new Point(0, 0)), TranslatePos(new Point(0, 100)));
            var cp = cpSize / 2;

            for (int i = 0; i < cxs.Count; i++)
            {
                float x         = (float)cxs[i];
                float y         = (float)cys[i];
                Point drawPoint = TranslatePos(new Point((int)x, (int)y));
                e.Graphics.FillRectangle(brush, drawPoint.X - cp, drawPoint.Y - cp, cpSize, cpSize);
                e.Graphics.DrawString(x + " : " + y, Font, blkbrush, drawPoint.X, drawPoint.Y - 30);
            }
            // カーソルの上に座標を青字で表示
            var pos = Cursor.Position;

            pos = (PointToClient(pos));
            e.Graphics.FillRectangle(CursolBrush, pos.X - cp, pos.Y - cp, cpSize, cpSize);
            var transPos = DrawPosToDataPos((pos));

            e.Graphics.DrawString(transPos.X + " : " + transPos.Y, Font, CursolBrush, pos.X, pos.Y - 30);
        }