public Quadrilateral GetQuadrilateralByPosition(Plane plane, int positionX, int positionY )
        {
            var source = plane.Vertices.ToArray();

            int topLeft = ConvexGenerator.GetVertexIndex(PartWidth, positionX, positionY);
            int topRight = ConvexGenerator.GetVertexIndex(PartWidth, positionX + 1, positionY);
            int bottomRight = ConvexGenerator.GetVertexIndex(PartWidth, positionX + 1, positionY + 1);
            int bottomLeft = ConvexGenerator.GetVertexIndex(PartWidth, positionX, positionY + 1);

            return new Quadrilateral
                {
                    TopLeft = source[topLeft],
                    TopRight = source[topRight],
                    BottomRight = source[bottomRight],
                    BottomLeft = source[bottomLeft]
                };
        }
        public static void FillPlanes(this ConvexSettings settings)
        {
            settings.Planes = new List<Plane>();
            for (int i = 0; i < settings.NumberOfPlanes; i++)
            {
                var plane = new Plane();
                List<Color> colors = ConvexGenerator.GetFaceColors(settings.PartWidth, settings.PartHeight);

                plane.Colors = colors;
                Quadrilateral quadrilateral = ConvexGenerator.GenerateRandomQuadrilateral(settings.BoundaryBox,
                                                                                          settings.MinFractureSize,
                                                                                          settings.MaxFractureSize);
                Point[] vertices = ConvexGenerator.GetGridVertices(quadrilateral, settings.PartWidth,
                                                                   settings.PartHeight);
                plane.Vertices = new List<Point>();
                plane.Vertices.AddRange(vertices);
                settings.Planes.Add(plane);
            }
        }