コード例 #1
0
        void generarAristas()
        {
            int ponderacion = 0;
            int j           = 0;
            int generarID   = 0;
            //Arista aux = new Arista(-1, null, null, 5000);
            List <Point> pList;

            for (int i = 0; i < grafo.getVertices().Count; i++)
            {
                for (j = i + 1; j < grafo.getVertices().Count; j++)
                {
                    ponderacion = obtenerDistancia(grafo.getVertices()[i].getCentro(), grafo.getVertices()[j].getCentro());
                    pList       = new List <Point>(detectarObstaculos(grafo.getVertices()[i].getCentro(), grafo.getVertices()[j].getCentro()));
                    if (pList.Count != 0)
                    {
                        Arista arista = new Arista(generarID, grafo.getVertices()[i], grafo.getVertices()[j], ponderacion, pList);
                        grafo.getVertices()[i].agregarArista(arista);
                        generarID++;
                        pList.Reverse();
                        Arista _arista = new Arista(generarID, grafo.getVertices()[j], grafo.getVertices()[i], ponderacion, pList);
                        grafo.getVertices()[j].agregarArista(_arista);
                        generarID++;
                        //	MessageBox.Show("Primero elemento X: "+arista.getListaPixeles()[0].X+" Y:"+arista.getListaPixeles()[0].Y);

                        //MessageBox.Show("Primero elemento X: "+_arista.getListaPixeles()[0].X+" Y:"+_arista.getListaPixeles()[0].Y);
                        pictureBox1.Refresh();
                    }
                }
            }
            pictureBox1.Refresh();
            pintarAristas();
        }
コード例 #2
0
        public void tomarDecision(Point dst)
        {
            double co       = dst.Y - vActual.getCentro().Y;
            double ca       = dst.X - vActual.getCentro().X;
            double tan      = co / ca;
            double dg       = Math.Atan2(co, ca) * (180 / Math.PI);
            double menor    = 360;
            double menorAux = 360;

            //if(dg < 0)
            //	dg = dg * -1;

            camino = null;
            Arista aux      = null;
            int    contador = 0;

            for (int i = 0; i < vActual.getLista().Count; i++)
            {
                double nuevo_angulo = calcularAngulo(dst, dg, i);

                if (!vActual.getLista()[i].getDestino().getRastros().Exists(x => x == (rastro * -1)))
                {
                    if (!vActual.getLista()[i].getDestino().getRastros().Exists(x => x == rastro))
                    {
                        if (nuevo_angulo < menor)
                        {
                            camino = vActual.getLista()[i];
                            menor  = nuevo_angulo;
                        }
                    }
                    else
                    {
                        if (vActual.getLista()[i].getDestino().getRastros().Count < menorAux)
                        {
                            aux      = vActual.getLista()[i];
                            menorAux = vActual.getLista()[i].getDestino().getRastros().Count;
                        }
                        contador++;
                    }
                }
            }
            //velocidad = 5+avanzar;
            if (camino != null)
            {
                vActual.getRastros().Add(rastro);
            }
            else
            {
                if (aux != null)
                {
                    if (contador < 2)
                    {
                        vActual.getRastros().Add(rastro * -1);
                    }

                    camino = aux;
                    vActual.getRastros().Add(rastro);
                    //vActual.getRastros().Add(rastro*-1);
                }
            }
        }
コード例 #3
0
 public void setCamino(Arista p)
 {
     camino = p;
 }
コード例 #4
0
 public void agregarArista(Arista l)
 {
     this.aL.Add(l);
 }