private static DnaCircleDrawing GetNewInitializedDrawing() { // var drawing = new DnaCircleDrawing(); var drawing = new DnaCircleDrawing(); drawing.Init(); return(drawing); }
private void tmrRedraw_Tick(object sender, EventArgs e) { if (currentDrawing == null) { return; } //int polygons = currentDrawing.Polygons.Count; int circles = currentDrawing.Circles.Count; int points = currentDrawing.PointCount; double avg = 0; if (circles != 0) { avg = points / circles; } toolStripStatusLabelFitness.Text = errorLevel.ToString(); toolStripStatusLabelGeneration.Text = generation.ToString(); toolStripStatusLabelSelected.Text = selected.ToString(); toolStripStatusLabelPoints.Text = points.ToString(); toolStripStatusLabelPolygons.Text = circles.ToString(); toolStripStatusLabelAvgPoints.Text = avg.ToString(); // TODO: bool shouldRepaint = false; bool shouldRepaint = true; if (repaintIntervall.Ticks > 0) { if (lastRepaint < DateTime.Now - repaintIntervall) { shouldRepaint = true; } } if (repaintOnSelectedSteps > 0) { if (lastSelected + repaintOnSelectedSteps < selected) { shouldRepaint = true; } } if (shouldRepaint) { lock (currentDrawing) { guiDrawing = currentDrawing.Clone(); } pnlCanvas.Invalidate(); lastRepaint = DateTime.Now; lastSelected = selected; } }
private void StartEvolution() { SetupSourceColorMatrix(); if (currentDrawing == null) { currentDrawing = GetNewInitializedDrawing(); } lastSelected = 0; while (isRunning) { DnaCircleDrawing newDrawing; lock (currentDrawing) { newDrawing = currentDrawing.Clone(); } newDrawing.Mutate(); if (newDrawing.IsDirty) { generation++; double newErrorLevel = FitnessCalculator.GetDrawingFitness(newDrawing, sourceColors); if (newErrorLevel <= errorLevel) { selected++; lock (currentDrawing) { currentDrawing = newDrawing; } errorLevel = newErrorLevel; } } //else, discard new drawing } }