/// <summary> /// Handle update event from the evolution algorithm - update the view. /// </summary> public void _ea_UpdateEvent(object sender, EventArgs e) { // Switch execution to GUI thread if necessary. if(this.InvokeRequired) { // Must use Invoke(). BeginInvoke() will execute asynchronously and the evolution algorithm therefore // may have moved on and will be in an intermediate and indeterminate (between generations) state. this.Invoke(new MethodInvoker(delegate() { if(this.IsDisposed) { return; } // For each series, generate a point and add it to that series' point-pair list. int sourceCount = _dataSourceArray.Length; for(int i=0; i<sourceCount; i++) { TimeSeriesDataSource ds = _dataSourceArray[i]; Point2DDouble point = ds.GetPoint(); _pointPlotArray[i].Add(point.X, point.Y); } // Trigger graph to redraw. zed.AxisChange(); Refresh(); })); } }
/// <summary> /// Returns the distance between Point2DDouble a and Point2D b. /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> public static double GetDistance(Point2DDouble a, Point2D b) { return(System.Math.Sqrt(System.Math.Pow(b.X - a.X, 2) + System.Math.Pow(b.Y - a.Y, 2))); }