public List <IFSFormula> ReplicateList(List <IFSFormula> originalList)
        {
            List <IFSFormula> newList = new List <IFSFormula>();

            foreach (IFSFormula f in originalList)
            {
                IFSFormula formulaCopy = new IFSFormula(f.a, f.b, f.c, f.d, f.e, f.f, f.p);
                newList.Add(formulaCopy);
            }
            return(newList);
        }
        //In this case, "lastPoint" only tracks which pixels are being painted on the bitmap, but the actual point generated by the last iteration is saved in "lastIfsPoint".
        private Point DoNextIFSIteration()
        {
            int        chosenIndex = GetChosenFormula((float)rng.NextDouble() * ifsWeight);
            IFSFormula f           = IfsFormulas[chosenIndex];
            F_Point    p           = lastIfsPoint;
            double     realX       = (f.a * p.X) + (f.b * p.Y) + f.e;
            double     realY       = (f.c * p.X) + (f.d * p.Y) + f.f;

            lastIfsPoint = new F_Point(realX, realY);

            int x = (int)Math.Round(realX * IfsMagnificationX) + CenterPoint.X;
            int y = -(int)Math.Round(realY * IfsMagnificationY) + CenterPoint.Y;

            return(new Point(x, y));
        }