Пример #1
0
        public DNAPoint Copy()
        {
            DNAPoint copy = new DNAPoint();

            copy.calculated = calculated;

            copy.x = x;
            copy.y = y;

            return(copy);
        }
Пример #2
0
        public DNAPolygon()
        {
            brush  = new DNABrush();
            points = new List <DNAPoint>();

            calculated = false;

            double x = gen.GetRandom();
            double y = gen.GetRandom();

            for (int i = 0; i < set.pointCountMin; ++i)
            {
                DNAPoint point = new DNAPoint();
                point.x = Math.Max(0,
                                   Math.Min(1, x + 2 * (gen.GetRandom() - 0.5) * set.polygonInitialScale));
                point.y = Math.Max(0,
                                   Math.Min(1, y + 2 * (gen.GetRandom() - 0.5) * set.polygonInitialScale));
                points.Add(point);
            }
        }
Пример #3
0
        public void Mutate()
        {
            if (gen.WillMutate(set.mutationChanceAddPoint) && points.Count < set.pointCountMax)
            {
                int ind = 1 + gen.GetRandom(points.Count);

                DNAPoint prev = points[ind - 1];
                DNAPoint next = points[ind % points.Count];

                DNAPoint newPoint = new DNAPoint();
                newPoint.x = (prev.x + next.x) / 2;
                newPoint.y = (prev.y + next.y) / 2;

                points.Insert(ind, newPoint);
                SetCalculated(false);
            }

            if (gen.WillMutate(set.mutationChanceRemovePoint) && points.Count > set.pointCountMin)
            {
                int ind = gen.GetRandom(points.Count);
                points.RemoveAt(ind);
                SetCalculated(false);
            }

            for (int i = 0; i < points.Count; ++i)
            {
                points[i].Mutate();
                if (points[i].IsCalculated == false)
                {
                    SetCalculated(false);
                }
            }

            brush.Mutate();
            if (brush.IsCalculated == false)
            {
                SetCalculated(false);
            }
        }