private void timer1_Tick(object sender, System.EventArgs e) { par_anim += par_anim_step; if (par_anim > par_anim_max) { par_anim = par_anim_max; par_anim_step = -par_anim_step; } else if (par_anim < par_anim_min) { par_anim = par_anim_min; par_anim_step = -par_anim_step; } if (f_anim != null) { double xd = 0, yd = 0; int x = 0, y = 0; if (f_anim is YFunction) { YFunction yf = (YFunction)f_anim; xd = par_anim; yd = yf.GetY(xd); statusBar1.Text = string.Format(" x={0:g4}", xd); } else if (f_anim is ParametricFunction) { ParametricFunction pf = (ParametricFunction)f_anim; xd = pf.GetX(par_anim); yd = pf.GetY(par_anim); statusBar1.Text = string.Format(" t={0:g4}", par_anim); } Axis xa = c1Chart1.ChartArea.AxisX; Axis ya = c1Chart1.ChartArea.AxisY; if (xd >= xa.Min && xd <= xa.Max && yd >= ya.Min && yd <= ya.Max && c1Chart1.ChartGroups[0].DataCoordToCoord(xd, yd, ref x, ref y)) { RedrawChart(); curPosition.X = x; curPosition.Y = y; RedrawChart(); } else { RedrawChart(); curPosition = Point.Empty; } } }