private List <IsoBlock> SearchLocalMaxIso(InitialPt initial, int concaveCount, bool isInitialPhase)
        {
            List <IsoBlock> bestBlocksL = new List <IsoBlock>();
            double          bestAreaL   = 0;

            foreach (double ratio in aspectRatio)
            {
                List <IsoBlock> tempBlocks = new List <IsoBlock>();

                IsoBlock tempBlock = new IsoBlock(initial, ratio);
                tempBlock.Inflate(boundary, boundCrv, minLength, !isInitialPhase);

                if (tempBlock.Area <= 0)
                {
                    continue;
                }

                if (concaveCount == 0)
                {
                    tempBlocks.Add(tempBlock);
                }

                else
                {
                    tempBlocks.Add(tempBlock);
                    tempBlocks.AddRange(SearchLocalMaxIso(tempBlock.NextInitialPt(), concaveCount - 1, false));
                }

                double tempArea = 0;
                tempBlocks.ForEach(n => tempArea += n.Area);

                if (tempArea > bestAreaL)
                {
                    bestBlocksL = tempBlocks;
                    bestAreaL   = tempArea;
                }
            }

            return(bestBlocksL);
        }