Esempio n. 1
0
        public Poligonos(IList <LineSLT> Bordes)
        {
            _Inicializa();

            //obtengo cada uno de los distintos polígonos cerrados
            IList <Shape> Pols = Shape.GenerarPoligonos(Bordes);

            IList <bool> Usados = new List <bool>(Pols.Count);

            for (int t = 0; t < Pols.Count; t++)
            {
                Usados.Add(false);
            }

            //veo que polígonos no están contenidos por otros
            for (int S = 0; S < Pols.Count; S++)
            {
                bool Contenido = false;
                for (int s = 0; s < Pols.Count; s++)
                {
                    if (S != s && Pols[s].ContieneA(Pols[S]))
                    {
                        Contenido = true;
                        break;
                    }
                }

                if (!Contenido)
                {
                    //he encontrado un borde exterior
                    Poligono TempPol = new Poligono(Pols[S]);
                    Usados[S] = true;

                    //busco sus islas
                    for (int i = 0; i < Pols.Count; i++)
                    {
                        if (S != i && Pols[S].ContieneA(Pols[i]))
                        {
                            TempPol.AddIsla(Pols[i]);
                            Usados[i] = true;
                        }
                    }

                    this._Poligonos.Add(TempPol);
                    Bownding.Actualizar(TempPol.Bownding.Maximos);
                    Bownding.Actualizar(TempPol.Bownding.Minimos);
                }
            }

            for (int r = 0; r < Pols.Count; r++)
            {
                if (!Usados[r])
                {
                    Poligono restPol = new Poligono(Pols[r]);
                    this._Poligonos.Add(restPol);
                    Bownding.Actualizar(restPol.Bownding.Maximos);
                    Bownding.Actualizar(restPol.Bownding.Minimos);
                }
            }
        }
Esempio n. 2
0
        public Poligono Equidista(double Distancia)
        {
            //retorna la equidistancia
            Poligono Res = new Poligono();

            //eqidistancia con signo, así las islas equidistan en el sentido correcto

            Res._Exterior = _Exterior.Equidista(Distancia);

            foreach (Shape S in _Islas)
            {
                Res.AddIsla(S.Equidista(Distancia));
            }

            return(Res);
        }