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); }