Exemplo n.º 1
0
 public static void RasterizeVectorDrawing(Graphics graphics, VectorDrawing vectorDrawing)
 {
     foreach (var coloredTriangle in vectorDrawing.Vectors)
     {
         FillColoredTriangle(graphics, coloredTriangle);
     }
 }
Exemplo n.º 2
0
        public long CalculateFitness(VectorDrawing vectorDrawing, Bitmap bitmap)
        {
            if (ReferenceEquals(null, bitmap))
            {
                return(0L);
            }
            var distance = 0L;

            using (var image = new Bitmap(bitmap.Width, bitmap.Height))
            {
                using (var graphics = Graphics.FromImage(image))
                {
                    GraphicsExtensions.RasterizeVectorDrawing(graphics, vectorDrawing);
                }
                for (var x = 0; x < bitmap.Width; x++)
                {
                    for (var y = 0; y < bitmap.Height; y++)
                    {
                        var bitmapColor = bitmap.GetPixel(x, y);
                        var inputColor  = image.GetPixel(x, y);
                        distance += Math.Abs(bitmapColor.R - inputColor.R);
                        distance += Math.Abs(bitmapColor.G - inputColor.G);
                        distance += Math.Abs(bitmapColor.B - inputColor.B);
                    }
                }
                return(distance);
            }
        }
Exemplo n.º 3
0
        public VectorDrawing Mutate(VectorDrawing drawing, int width, int height)
        {
            var count     = drawing.Vectors.Count();
            var triangles = drawing.Vectors.ToList();

            if (count > 1 && random.Next(2) == 0)
            {
                triangles.RemoveAt(random.Next(count));
            }
            else
            {
                triangles.Add(ColoredTriangleGenetics.Instance.Create(width, height));
            }
            return(new VectorDrawing()
            {
                Vectors = triangles
            });
        }
Exemplo n.º 4
0
        public VectorDrawing Recombine(VectorDrawing drawingA, VectorDrawing drawingB)
        {
            var triangles = new List <ColoredTriangle>();
            var maxLength = Math.Max(drawingA.Vectors.Count(), drawingB.Vectors.Count());
            var minLength = Math.Min(drawingA.Vectors.Count(), drawingB.Vectors.Count());
            var aIsBigger = drawingA.Vectors.Count() == maxLength;

            for (var i = 0; i < maxLength; i++)
            {
                if ((i % 2 == 0 && i < minLength) || (i >= minLength && aIsBigger))
                {
                    triangles.Add(drawingA.Vectors.ElementAt(i));
                }
                else
                {
                    triangles.Add(drawingB.Vectors.ElementAt(i));
                }
            }
            return(new VectorDrawing()
            {
                Vectors = triangles
            });
        }