示例#1
0
        private static DnaCircleDrawing GetNewInitializedDrawing()
        {
            // var drawing = new DnaCircleDrawing();
            var drawing = new DnaCircleDrawing();

            drawing.Init();
            return(drawing);
        }
示例#2
0
        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;
            }
        }
示例#3
0
        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
            }
        }