private List <Antena> EncontrarGrupo(Antena antenaInicial, int numeroDeGrupo) { foreach (var antena in Antenas) { antena.Visitada = false; } List <Antena> antenasPorVisitar = new List <Antena>(); antenasPorVisitar.Add(antenaInicial); List <Antena> antenasEnGrupo = new List <Antena>(); while (antenasPorVisitar.Any()) { Antena antenaActual = antenasPorVisitar.First(); antenasPorVisitar.RemoveAt(0); antenaActual.Visitada = true; antenaActual.Grupo = numeroDeGrupo; antenasEnGrupo.Add(antenaActual); foreach (var conexion in antenaActual.Conexiones) { if (conexion.Visitada) { continue; } antenasPorVisitar.Add(conexion); } } return(antenasEnGrupo); }
public IHttpActionResult modificarAntena(Antena antena) { try { var accion = SessionController.getInstance().Antena.Where(w => w.idAntena == antena.idAntena).FirstOrDefault(); if (accion == null) { return(Ok(false)); } accion.idEstado = antena.idEstado; accion.idCiudad = antena.idCiudad; accion.idCP = antena.idCP; accion.idColonia = antena.idColonia; accion.calle = antena.calle; accion.numExt = antena.numExt; accion.lat = antena.lat; accion.lon = antena.lon; accion.activo = antena.activo; SessionController.getInstance().SaveChanges(); return(Ok(true)); } catch (Exception) { return(BadRequest()); } }
public int GetDistancia(Antena destino) { if (!_tablaDeRuteo.ContainsKey(destino.Id)) { Red.CalcularRutas(destino); } return(_tablaDeDistancias[destino.Id]); }
public Antena GetRuta(Antena destino) { if (!_tablaDeRuteo.ContainsKey(destino.Id)) { Red.CalcularRutas(destino); } return(_tablaDeRuteo[destino.Id]); }
void Start() { MensajePing.text = ""; Random = new Random(GenerationSeed); RedCom = new RedCom(); RedCom.Generar(Random); _antenaTransmisoraMensaje = RedCom.AntenaEmisora; _antenaTransmisoraMensaje.MensajeTrasnmitido = true; foreach (var nodo in RedCom.Antenas) { GameObject antenaFisica = Instantiate(AntenaFisicaPrefab, new Vector3(nodo.X, nodo.Y, 0), Quaternion.identity); _antenasFisicas.Add(antenaFisica); if (nodo == RedCom.AntenaEstacion) { CambiarMaterialAntena(antenaFisica, MaterialEstacion); antenaFisica.transform.localScale *= 2.0f; } if (nodo == _antenaTransmisoraMensaje) { CambiarMaterialAntena(antenaFisica, MaterialTransmitiendo); } PropiedadesAntena propiedadesAntena = antenaFisica.GetComponent <PropiedadesAntena>(); propiedadesAntena.IdAntena = nodo.Id; propiedadesAntena.Grupo = nodo.Grupo; if (nodo.AntenaGrande) { antenaFisica.transform.localScale *= 1.5f; } foreach (var conexion in nodo.Conexiones) { GameObject objetoLinea = new GameObject(); var lineRenderer = objetoLinea.AddComponent <LineRenderer>(); lineRenderer.positionCount = 2; lineRenderer.SetPosition(0, new Vector3(nodo.X, nodo.Y, 5)); lineRenderer.SetPosition(1, new Vector3(conexion.X, conexion.Y, 5)); lineRenderer.startWidth = 0.05f; lineRenderer.endWidth = 0.02f; lineRenderer.material = new Material(Shader.Find("Particles/Additive")); lineRenderer.startColor = Color.red; lineRenderer.endColor = Color.black; } } if (DebugMode) { RefreshTextosDistancias(); } }
private void UnirGrupos() { int cantidadGrupos = int.MaxValue; while (cantidadGrupos > 1) { foreach (var antena in Antenas) { antena.Grupo = -1; } int numeroDeGrupo = 0; foreach (var antena in Antenas) { if (antena.Grupo != -1) { continue; } List <Antena> grupoDeAntenas = EncontrarGrupo(antena, numeroDeGrupo); List <Antena> antenasFueraDelGrupo = Antenas.Where(a => !grupoDeAntenas.Contains(a)).ToList(); float distanciaMinima = float.MaxValue; Antena conexionInterna = null; Antena conexionExterna = null; foreach (var antenaEnGrupo in grupoDeAntenas) { foreach (var antenaOtroGrupo in antenasFueraDelGrupo) { float dX = antenaOtroGrupo.X - antenaEnGrupo.X; float dY = antenaOtroGrupo.Y - antenaEnGrupo.Y; float d2 = dX * dX + dY * dY; if (d2 < distanciaMinima) { distanciaMinima = d2; conexionInterna = antenaEnGrupo; conexionExterna = antenaOtroGrupo; } } } if (conexionInterna != null) { conexionInterna.Conexiones.Add(conexionExterna); conexionExterna.Conexiones.Add(conexionInterna); conexionInterna.AntenaGrande = true; conexionExterna.AntenaGrande = true; // Agrega la sección conectada al grupo actual EncontrarGrupo(conexionExterna, numeroDeGrupo); } numeroDeGrupo++; } cantidadGrupos = numeroDeGrupo; } }
private void GenerarGrafoAleatorio(Random random, int numeroNodos, float x0, float x1, float y0, float y1) { int idNodo = 0; float anchoMapa = Math.Abs(x1 - x0); float altoMapa = Math.Abs(y1 - y0); for (int i = 0; i < numeroNodos; i++) { Antena nuevaAntena = new Antena(idNodo++, this); bool posicionExitosa = false; while (!posicionExitosa && i < GenAleatoriaMaxIntentosPonerNodo) { nuevaAntena.X = anchoMapa * (float)random.NextDouble() + x0; nuevaAntena.Y = altoMapa * (float)random.NextDouble() + y0; posicionExitosa = true; foreach (Antena nodo in Antenas) { double dX = nuevaAntena.X - nodo.X; double dY = nuevaAntena.Y - nodo.Y; float distancia = Mathf.Sqrt((float)(dX * dX + dY * dY)); if (distancia < GenAleatoriaMinDistanciaEntreNodos) { posicionExitosa = false; break; } } if (posicionExitosa) { break; } i++; } if (posicionExitosa) { Antenas.Add(nuevaAntena); } } foreach (Antena n in Antenas) { foreach (Antena m in Antenas) { double dX = n.X - m.X; double dY = n.Y - m.Y; float distancia = Mathf.Sqrt((float)(dX * dX + dY * dY)); if (distancia < GenAleatoriaDistanciaDeConexion) { n.Conexiones.Add(m); m.Conexiones.Add(n); } } } UnirGrupos(); }
public void Post([FromBody] Antena antena) { if (antena != null) { using (var db = new AntenaRep()) { db.Insert(antena); } } }
public void DestruirAntena(Antena antenaADestruir) { Antenas.Remove(antenaADestruir); foreach (var a in Antenas) { a.Conexiones.Remove(antenaADestruir); } CalcularTodasLasRutas(); }
public void Put([FromBody] Antena antena) { if (antena != null) { using (var db = new AntenaRep()) { db.Update(antena); } } }
public bool todasLasAntenasEncendidas() { for (int i = 0; i < CantidadDeAntenas; i++) { Antena antenaScript = Antenas[i].GetComponent <Antena>(); if (!antenaScript.Encendida) { return(false); } } return(true); }
private void DestruirAntena(Antena antenaADestruir) { RedCom.DestruirAntena(antenaADestruir); GameObject antenaFisica = GetAntenaFisica(antenaADestruir); _antenasFisicas.Remove(antenaFisica); Destroy(antenaFisica); if (DebugMode) { RefreshTextosDistancias(); } }
private void GenerarGrafoRectangular(Random random, int anchoGrafo, int altoGrafo, float anchoMapa, float altoMapa) { float distanciaHorizontal = anchoMapa / (anchoGrafo - 1); float distanciaVertical = altoMapa / (altoGrafo - 1); int idNodo = 0; for (int y = 0; y < altoGrafo; y++) { for (int x = 0; x < anchoGrafo; x++) { Antena nuevoAntena = new Antena(idNodo++, this) { X = x * distanciaHorizontal - anchoMapa / 2, Y = -y * distanciaVertical + altoMapa / 2 }; Antenas.Add(nuevoAntena); } } for (int y = 0; y < altoGrafo; y++) { for (int x = 0; x < anchoGrafo; x++) { int index = y * anchoGrafo + x; int indexDerecha = y * anchoGrafo + x + 1; int indexAbajo = (y + 1) * anchoGrafo + x; Antena antenaActual = Antenas.ElementAt(index); ICollection <Antena> conexiones = antenaActual.Conexiones; if (random.Next(4) == 0) { continue; } if (x + 1 < anchoGrafo) { conexiones.Add(Antenas.ElementAt(indexDerecha)); Antenas.ElementAt(indexDerecha).Conexiones.Add(antenaActual); } if (y + 1 < altoGrafo) { conexiones.Add(Antenas.ElementAt(indexAbajo)); Antenas.ElementAt(indexAbajo).Conexiones.Add(antenaActual); } } } }
private void PingAntena(Antena antenaAPinguear) { if (_pinging || antenaAPinguear == RedCom.AntenaEstacion) { return; } _antenaOrigenPing = RedCom.AntenaEstacion; _antenaTransmisoraPing = _antenaOrigenPing; _antenaDestinoPing = antenaAPinguear; _timerPing = 0; _pinging = true; _pingFisico = Instantiate(PingPrefab, new Vector3(_antenaOrigenPing.X, _antenaOrigenPing.Y, 0), Quaternion.identity); }
public void Generar(Random random) { Camera cam = Camera.main; float height = 2f * cam.orthographicSize; float width = height * cam.aspect; GenerarGrafoAleatorio(random, 90, -width / 2 + 1, width / 2 - 1, -height / 2 + 2, height / 2 - 1); // GenerarGrafoRectangular(random, 8, 8, width - 1, height - 1); CalcularTodasLasRutas(); AntenaReceptora = Antenas.ElementAt(random.Next(Antenas.Count)); AntenaEmisora = ElegirAntenaEmisora(random, 6, 10); AntenaEstacion = ElegirAntenaEstacion(random, 3, 3); }
private void TransmitirMensaje() { GameObject antenaFisicaTransmisora = GetAntenaFisica(_antenaTransmisoraMensaje); antenaFisicaTransmisora.GetComponent <Animator>().SetBool("Emitiendo", false); _antenaTransmisoraMensaje = _antenaTransmisoraMensaje.GetRuta(RedCom.AntenaReceptora); _antenaTransmisoraMensaje.MensajeTrasnmitido = true; if (_antenaTransmisoraMensaje == RedCom.AntenaReceptora) { MensajeEnDestino(); } antenaFisicaTransmisora = GetAntenaFisica(_antenaTransmisoraMensaje); antenaFisicaTransmisora.GetComponent <Animator>().SetBool("Emitiendo", true); }
void Update() { if (Input.GetButtonDown ("Fire1")) { Ray mousePosition = Camera.main.ScreenPointToRay (Input.mousePosition); RaycastHit _Hit; if(Physics.Raycast (mousePosition,out _Hit,100f)){ if (_Hit.collider.CompareTag ("Antena")) { if (vecesTocado >= cantidadDeToquesParaDesactivar) { AntenaScript = _Hit.collider.GetComponent <Antena> (); AntenaScript.DesactivarAntena(); Debug.Log("veces tocado: " + vecesTocado); Debug.Log("cantidad para desactivar: " + cantidadDeToquesParaDesactivar); vecesTocado = 0; } else { vecesTocado++; } } } } }
public void CalcularRutas(Antena antenaDestino) { foreach (var antena in Antenas) { antena.Visitada = false; antena.SetRuta(antenaDestino, null); antena.SetDistancia(antenaDestino, DistanciaSinConexion); } List <Antena> antenasPorVisitar = new List <Antena>(); antenaDestino.SetDistancia(antenaDestino, 0); antenaDestino.Visitada = true; antenasPorVisitar.Add(antenaDestino); while (antenasPorVisitar.Any()) { Antena antenaActual = antenasPorVisitar.First(); antenasPorVisitar.RemoveAt(0); antenaActual.Visitada = true; foreach (var conexion in antenaActual.Conexiones) { if (conexion.Visitada) { continue; } int distanciaConexion = antenaActual.GetDistancia(antenaDestino) + 1; if (distanciaConexion < conexion.GetDistancia(antenaDestino)) { conexion.SetDistancia(antenaDestino, distanciaConexion); conexion.SetRuta(antenaDestino, antenaActual); } antenasPorVisitar.Add(conexion); } } }
public Antena[] GetProximasAntenasScripts() { Antena[] antenasScript = new Antena[antenasGeneradasEnParalelo]; for (int i = 0; i < antenasScript.Length; i++) { if (todasLasAntenasEncendidas()) { SceneManager.LoadScene(0); CancelInvoke("activarAntenas"); return(new Antena[0]); } int posNextAntena = Random.Range(0, CantidadDeAntenas); Debug.Log(posNextAntena); Antena antena = Antenas [posNextAntena].GetComponent <Antena>(); while (antena.Encendida) { posNextAntena = Random.Range(0, CantidadDeAntenas); antena = Antenas [posNextAntena].GetComponent <Antena> (); } antenasScript[i] = antena; } return(antenasScript); }
public IHttpActionResult agregarAntena(Antena antena) { try { var accion = SessionController.getInstance().Antena.Where(w => w.numExt == antena.numExt).FirstOrDefault(); if (accion != null) { return(Ok(false)); } var datos = new Antena { idAntena = Guid.NewGuid(), idEstado = antena.idEstado, idCiudad = antena.idCiudad, idCP = antena.idCP, idColonia = antena.idColonia, calle = antena.calle, numExt = antena.numExt, lat = antena.lat, lon = antena.lon, activo = antena.activo }; SessionController.getInstance().Antena.Add(datos); SessionController.getInstance().SaveChanges(); return(Ok(true)); } catch (Exception) { return(BadRequest()); } }
public void SetRuta(Antena destino, Antena ruta) { _tablaDeRuteo[destino.Id] = ruta; }
public void SetDistancia(Antena destino, int distancia) { _tablaDeDistancias[destino.Id] = distancia; }
private GameObject GetAntenaFisica(Antena antena) { return(_antenasFisicas.FirstOrDefault(a => a.GetComponent <PropiedadesAntena>().IdAntena == antena.Id)); }
public Estacion(int id, Antena antenaPing) { Id = id; AntenaPing = antenaPing; }
private void TransmitirPing() { _antenaTransmisoraPing = _antenaTransmisoraPing.GetRuta(_antenaDestinoPing); if (_pingingLlegoADestino && _antenaTransmisoraPing == _antenaOrigenPing) { ResultadoPing(); Destroy(_pingFisico); _pinging = false; } else { if (_antenaTransmisoraPing == _antenaDestinoPing) { _pingingLlegoADestino = true; _pingExitoso = _antenaDestinoPing.MensajeTrasnmitido || _antenaTransmisoraMensaje.GetRuta(RedCom.AntenaReceptora) == _antenaDestinoPing; _pingMensaje = "---INFORMACIÓN EN DESTINO / ANTENA #" + _antenaDestinoPing.Id + " ---\n"; int anchoMensaje = _pingMensaje.Count(); if (_pingExitoso) { RedCom.CalcularRutas(_antenaTransmisoraMensaje); int distancia = _antenaDestinoPing.GetDistancia(_antenaTransmisoraMensaje); if (_antenaDestinoPing.MensajeTrasnmitido) { if (distancia == 0) { _pingMensaje += " ! EMITIENDO MENSAJE !\n"; } else { _pingMensaje += "MENSAJE REEMITIDO - Distancia: " + distancia; if (distancia == 1) { _pingMensaje += " salto.\n"; } else { _pingMensaje += " saltos.\n"; } } } else { _pingMensaje += "! RECIBIENDO MENSAJE !\n"; } } else { _pingMensaje += "El mensaje no paso por aquí.\n"; } for (int i = 0; i < anchoMensaje - 1; i++) { _pingMensaje += "-"; } _antenaDestinoPing = _antenaOrigenPing; } } }