private void criaAET(Bitmap imageBitSrc, ListaET[] listas)
        {
            try
            {
                ListaET AET = new ListaET();
                int     Y   = -1;

                retornaET(listas, AET, ref Y);

                while (AET.Inicio != null)
                {
                    AET.retirarIgual(Y); // retirar y == ymax

                    if (AET.Inicio != null)
                    {
                        AET.ordenaXmin();                   // ordernar a AET pelo xmin de forma crescente
                        pintarValores(AET, imageBitSrc, Y); // desenhar aos pares na lista AET, de xmin até xmin
                        incrementaXMIN(AET);                // incrementar o xmin de cada caixa com seu incrx respectivo
                        Y++;                                // Y++
                        retornaET(listas, AET, ref Y);      // chamar o retornaET passado o Y
                    }
                }
            }
            catch (Exception e) { }
        }
        private void incrementaXMIN(ListaET AET)
        {
            NoListaET aux = AET.Inicio;

            while (aux != null)
            {
                aux.Xmin1 += aux.IncrX1;
                aux        = aux.Prox;
            }
        }
        private void pintarValores(ListaET AET, Bitmap imageBitSrc, int y)
        {
            NoListaET cx1, cx2;

            cx1 = AET.Inicio;
            cx2 = AET.Inicio.Prox;

            while (cx2 != null)
            {
                for (int i = (int)cx1.Xmin1; i < cx2.Xmin1; i++)
                {
                    imageBitSrc.SetPixel(i, y, Color.FromArgb(150, 150, 150));
                }

                cx1 = cx1.Prox.Prox;
                cx2 = cx1 == null ? null : cx2.Prox.Prox;
            }
        }
        private void retornaET(ListaET[] listas, ListaET AET, ref int y)
        {
            NoListaET aux;

            if (y == -1)
            {
                for (int i = 0; i < listas.Length; i++)
                {
                    if (listas[i] != null)
                    {
                        y = i;

                        aux = listas[i].Inicio;
                        while (aux != null)
                        {
                            AET.inserir(aux.Ymax1, aux.Xmin1, aux.IncrX1);
                            aux = aux.Prox;
                        }


                        break;
                    }
                }
            }
            else
            {
                if (listas[y] != null)
                {
                    aux = listas[y].Inicio;

                    while (aux != null)
                    {
                        AET.inserir(aux.Ymax1, aux.Xmin1, aux.IncrX1);
                        aux = aux.Prox;
                    }
                }
            }
        }
        private void carregaListaET(Bitmap imageBitSrc)
        {
            int tamLista = retornaYMax();

            ListaET[] listas = new ListaET[tamLista + 1];
            double    Ymax = 0, Xmim = 0, incrX = 0, dy, dx, Ymin;

            for (int i = 0; i < verticesAtuais.Count - 1; i++)
            {
                if (verticesAtuais[i].Y < verticesAtuais[i + 1].Y)
                {
                    Ymax = verticesAtuais[i + 1].Y;
                    Xmim = verticesAtuais[i].X;
                    Ymin = verticesAtuais[i].Y;

                    dy = Ymax - Ymin;
                    dx = verticesAtuais[i + 1].X - Xmim;
                }
                else
                {
                    Ymax = verticesAtuais[i].Y;
                    Xmim = verticesAtuais[i + 1].X;
                    Ymin = verticesAtuais[i + 1].Y;

                    dy = Ymax - Ymin;
                    dx = verticesAtuais[i].X - Xmim;
                }

                incrX = dx / dy;
                if (listas[(int)Ymin] == null)
                {
                    listas[(int)Ymin] = new ListaET();
                }

                listas[(int)Ymin].inserir(Ymax, Xmim, incrX);
            }

            if (verticesAtuais[0].Y < verticesAtuais[verticesAtuais.Count - 1].Y)
            {
                Ymax = verticesAtuais[verticesAtuais.Count - 1].Y;
                Xmim = verticesAtuais[0].X;
                Ymin = verticesAtuais[0].Y;

                dy = Ymax - Ymin;
                dx = verticesAtuais[verticesAtuais.Count - 1].X - Xmim;
            }
            else
            {
                Ymax = verticesAtuais[0].Y;
                Xmim = verticesAtuais[verticesAtuais.Count - 1].X;
                Ymin = verticesAtuais[verticesAtuais.Count - 1].Y;

                dy = Ymax - Ymin;
                dx = verticesAtuais[0].X - Xmim;
            }

            incrX = dx / dy;
            if (listas[(int)Ymin] == null)
            {
                listas[(int)Ymin] = new ListaET();
            }
            listas[(int)Ymin].inserir(Ymax, Xmim, incrX);

            criaAET(imageBitSrc, listas);
        }