using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication2 { public partial class Form2 : Form { public Form2() { InitializeComponent(); this.tChart1.Series[0].Add(1, 2); this.tChart1.Series[0].Add(2, 6); this.tChart1.Series[0].Add(6, 3); } private double xval; private void cursorTool1_Change(object sender, Steema.TeeChart.Tools.CursorChangeEventArgs e) { try { xval = e.XValue; tChart1.Header.Text = ""; for (int i = 0; i < tChart1.Series.Count; i++) if (tChart1.Series[i] is Steema.TeeChart.Styles.Custom) { tChart1.Header.Text += tChart1.Series[i].Title + ": Y(" + e.XValue.ToString("0.00") + ")= "; tChart1.Header.Text += InterpolateLineSeries(tChart1.Series[i] as Steema.TeeChart.Styles.Custom, e.XValue).ToString("0.00") + " "; } } catch (Exception ex) { Console.WriteLine(ex.Message); } } private double InterpolateLineSeries(Steema.TeeChart.Styles.Custom series, double xvalue) { return InterpolateLineSeries(series, series.FirstVisibleIndex, series.LastVisibleIndex, xvalue); } /// <summary> /// Calculate y=y(x) for arbitrary x. Works fine only for line series with ordered x values. /// </summary> /// <param name="series"></param> /// <param name="firstindex"></param> /// <param name="lastindex"></param> /// <param name="xvalue"></param> /// <returns>y=y(xvalue) where xvalue is arbitrary x value.</returns> private double InterpolateLineSeries(Steema.TeeChart.Styles.Custom series, int firstindex, int lastindex, double xvalue) { try { int index; for (index = firstindex; index <= lastindex; index++) { if (index == -1 || series.XValues.Value[index] > xvalue) break; } // safeguard if (index < 1) index = 1; else if (index >= series.Count) index = series.Count - 1; // y=(y2-y1)/(x2-x1)*(x-x1)+y1 double dx = series.XValues[index] - series.XValues[index - 1]; double dy = series.YValues[index] - series.YValues[index - 1]; if (dx != 0.0) return dy * (xvalue - series.XValues[index - 1]) / dx + series.YValues[index - 1]; else return 0.0; } catch (Exception ex) { Console.WriteLine(ex.Message); return 0.0; } } } }