/// <summarly>
        ///  Makes the color plot of the function whose values at the polygon polygons[i-1] is values[i-1]
        /// </summary>
        /// <param name="graphl">the object at which the plot will be drawn</param>
        /// <param name="polygons">the table of polygons</param>
        /// <param name="values">the table of values</param>

        /* static public void ColorAreas(ref Graphics graphl, List<MyPolygon> polygons, double[] values, MyGraphOperations.ColorsFunc ColFunc)
         * {
         *
         *   if (graphl == null) throw new ArgumentNullException();
         *   if (polygons.Count() != values.Count()) throw new ArgumentException("The number of elements in polygons is not equal to the number of elements in values");
         *   for (int Iterator = 1; Iterator <= polygons.Count(); Iterator++)
         *   {
         *
         *       graphl.FillPolygon(BrushForColor(ColFunc, values[Iterator - 1]), polygons[Iterator - 1].Apexes());
         *   }
         * }*/

        /// <summary>
        /// Makes the color plot of the function FunVal in the area Area at the Graphl - the number of divisions along each from both axes is NDiv
        /// </summary>
        /// <param name="FunVal"></param>
        /// <param name="ColFunc"></param>
        /// <param name="Area"></param>
        /// <param name="TrMatrix">The matrix which will be used for making transformations of coordinates from the Area to the coordinate system in which the function will be drawn   </param>
        static public void ColorFunc(ref Graphics Graphl, FuncOnPoint FOP, MyGraphOperations.ColorsFunc ColFunc, RectangleF Area, int NDiv, Matrix TrMatrix)
        {
            MyPointDouble LeftDownCor = new MyPointDouble(Area.Left, Area.Top, 0.0);
            MyPointDouble HorizStep   = new MyPointDouble(Area.Width / NDiv, 0.0, 0.0);
            MyPointDouble VertStep    = new MyPointDouble(0.0, Area.Height / NDiv, 0.0);

            MyPointDouble LeftDownCorPlot = LeftDownCor;

            MyPointDouble HorizStepPlot = HorizStep;
            MyPointDouble VertStepPlot  = VertStep;


            MyPointDouble PtIter     = new MyPointDouble(0.0, 0.0, 0.0);
            MyPointDouble PtIterPlot = new MyPointDouble(0.0, 0.0, 0.0);

            MyDrawing.TransformPoint(TrMatrix, ref LeftDownCorPlot);
            MyDrawing.TransformVector(TrMatrix, ref HorizStepPlot);
            MyDrawing.TransformVector(TrMatrix, ref VertStepPlot);

            double heightl = Area.Height / NDiv;
            double widthl  = Area.Width / NDiv;


            //Matrix AddTransf = new Matrix(1.0F, 0.0F, 0.0F, 1.0F, 0.0F, 50.0F);

            for (int i = 1; i <= NDiv; i++)
            {
                for (int j = 1; j <= NDiv; j++)
                {
                    PtIter     = LeftDownCor + (i - 0.5) * HorizStep + (j - 0.5) * VertStep;
                    PtIterPlot = LeftDownCorPlot + (i - 1.0) * HorizStepPlot + (j - 1) * VertStepPlot;
                    //TransformPoint(AddTransf, ref PtIterPlot);
                    RectangleF RecLoc = new RectangleF((float)(PtIterPlot.x), (float)(PtIterPlot.y), (float)HorizStepPlot.x, (float)VertStepPlot.y);
                    Graphl.FillRectangle(BrushForColor(ColFunc, FOP(PtIter.x, PtIter.y)), RecLoc);
                }
            }
        }
        /// <summary>
        /// The homologue of ColorFuncNorm for the case of the array of polygons with values with the use of the default function DefColFunc
        /// </summary>
        /// <param name="Graphl">the object at which the plot will be drawn</param>
        /// <param name="polygons">polygons delimiting regions</param>
        /// <param name="values">values of the function at polygons</param>

        /*  static public void ColorTableNorm(ref Graphics graphl, List<MyPolygon> polygons, double[] values)
         * {
         *    ColorTableNorm(ref graphl,  polygons, values, DefColFunc);
         * }*/



        /// <summary>
        /// The homologue of ColorFuncNorm for the case of the array of polygons with values
        /// </summary>
        /// <param name="Graphl">the object at which the plot will be drawn</param>
        /// <param name="polygons">polygons delimiting regions</param>
        /// <param name="values">values of the function at polygons</param>
        /// <param name="ColFunc">the function used for finding colors</param>

        /*static public void ColorTableNorm(ref Graphics graphl, List<MyPolygon> polygons, double[] values, ColorsFunc ColFunc)
         * {
         *  if (graphl == null) throw new ArgumentNullException();
         *  if (polygons.Count() != values.Count()) throw new ArgumentException("The number of elements in the list polygons is different from the number in the list values");
         *  DefColFuncMax=values.Max();
         *  DefColFuncMin = values.Min();
         *  ColorAreas(ref graphl, polygons, values, ColFunc);
         * }*/

        /// <summary>
        /// Makes the "normalized" color plot of the function FunVal in the area Area at the Graphl  with the help of the function DefColFunc- the number of divisions along each from both axes is NDiv
        /// </summary>
        /// <param name="Graphl"></param>
        /// <param name="FOP"></param>
        /// <param name="ColFunc"></param>
        /// <param name="Area"></param>
        /// <param name="NDiv"></param>
        /// <param name="TrMatrix">The matrix which will be used for making transformations of coordinates from the Area to the coordinate system in which the function will be drawn   </param>
        static public void ColorFuncNorm(ref Graphics Graphl, FuncOnPoint FOP, MyGraphOperations.ColorsFunc ColFunc, RectangleF Area, int NDiv, Matrix TrMatrix)
        {
            FindExtrema(FOP, Area, NDiv, ref DefColFuncMin, ref DefColFuncMax);
            ColorFunc(ref Graphl, FOP, DefColFunc, Area, NDiv, TrMatrix);
        }