protected override Punto CompletarPunto(Punto puntoCentro) { if (Orientacion.Equals(OrientacionesCara.Abajo)) { return(puntoCentro.SumarPunto(new Punto(0, 0, Figura.PasoZ))); } else if (Orientacion.Equals(OrientacionesCara.Adelante)) { return(puntoCentro.SumarPunto(new Punto(-Figura.PasoX, 0, 0))); } else if (Orientacion.Equals(OrientacionesCara.Arriba)) { return(puntoCentro.SumarPunto(new Punto(0, 0, -Figura.PasoZ))); } else if (Orientacion.Equals(OrientacionesCara.Atraz)) { return(puntoCentro.SumarPunto(new Punto(Figura.PasoX, 0, 0))); } else if (Orientacion.Equals(OrientacionesCara.Derecha)) { return(puntoCentro.SumarPunto(new Punto(0, -Figura.PasoY, 0))); } else //if (Orientacion.Equals(OrientacionesCara.Izquierda)) { return(puntoCentro.SumarPunto(new Punto(0, Figura.PasoY, 0))); } }
/// <summary> /// Hace anzar el dron en el eje XY en funcion de su orientacion. /// </summary> private void Avanzar() { if (Orientacion.Equals('N')) ///Norte { if (Coordenadas["Y"] < AreaPatrulla["Y"]) { Coordenadas["Y"]++; } } else if (Orientacion.Equals('S')) ///Sur { if (Coordenadas["Y"] > 0) { Coordenadas["Y"]--; } } else if (Orientacion.Equals('E')) ///Este { if (Coordenadas["X"] < AreaPatrulla["X"]) { Coordenadas["X"]++; } } else { if (Coordenadas["X"] > 0) ///Oeste { Coordenadas["X"]--; } } }
protected override void GenerarIndices() { this.indices = new List <int>(); if (Orientacion.Equals(OrientacionesCara.Arriba) || Orientacion.Equals(OrientacionesCara.Abajo)) { for (int indicePrimerElementoFila = 0; indicePrimerElementoFila < ((CantidadPixelesAlto - 1) * CantidadPixelesAncho); indicePrimerElementoFila += CantidadPixelesAlto) { for (int numeroColumna = 0; numeroColumna < CantidadPixelesAncho - 1; numeroColumna++) { indices.Add(numeroColumna + indicePrimerElementoFila); indices.Add(numeroColumna + indicePrimerElementoFila + CantidadPixelesAncho); indices.Add(numeroColumna + indicePrimerElementoFila + CantidadPixelesAncho + 1); indices.Add(numeroColumna + indicePrimerElementoFila + 1); } } } else { for (int indicePrimerElementoColumna = 0; indicePrimerElementoColumna < ((CantidadPixelesAlto - 1) * CantidadPixelesAncho); indicePrimerElementoColumna += CantidadPixelesAncho) { for (int numeroFila = 0; numeroFila < CantidadPixelesAlto - 1; numeroFila++) { indices.Add(numeroFila + indicePrimerElementoColumna); indices.Add(numeroFila + indicePrimerElementoColumna + CantidadPixelesAlto); indices.Add(numeroFila + indicePrimerElementoColumna + CantidadPixelesAlto + 1); indices.Add(numeroFila + indicePrimerElementoColumna + 1); } } } }
protected override void CalcularExtremos() { if (Orientacion.Equals(OrientacionesCara.Izquierda)) { xInicial = 0; xFinal = Figura.LongitudX / 2d; } else { xInicial = Figura.LongitudX / 2d; xFinal = Figura.LongitudX; } yInicial = 0; yFinal = Figura.LongitudY; zInicial = 0; zFinal = Figura.LongitudZ; xInicial += Figura.Posicion.X; xFinal += Figura.Posicion.X; yInicial += Figura.Posicion.Y; yFinal += Figura.Posicion.Y; zInicial += Figura.Posicion.Z; zFinal += Figura.Posicion.Z; }
private double CalcularY(double x, double z) { // El valor de y máximo depende de z Double yMax = (yFinal - yInicial) * (1 - ((z - zInicial) / (zFinal - zInicial))); // Cuanto más avanzado en x más cercano al y final if (Orientacion.Equals(OrientacionesCara.Izquierda)) { return(yInicial + (yMax * ((x - xInicial) / (xFinal - xInicial)))); } else { return(yInicial + (yMax * (1 - ((x - xInicial) / (xFinal - xInicial))))); } }
protected override void GenerarNormales() { normales = new List <Punto>(); Boolean invertirNormal = false; Punto puntoNorte = null; Punto puntoSur = null; Punto puntoEste = null; Punto puntoOeste = null; Punto puntoCentro = null; if (Orientacion.Equals(OrientacionesCara.Arriba) || Orientacion.Equals(OrientacionesCara.Adelante) || Orientacion.Equals(OrientacionesCara.Izquierda)) { invertirNormal = true; } if (Orientacion.Equals(OrientacionesCara.Arriba) || Orientacion.Equals(OrientacionesCara.Abajo)) { for (int indiceFila = 0; indiceFila < CantidadPixelesAlto; indiceFila++) // indice fila { for (int indiceColumna = 0; indiceColumna < CantidadPixelesAncho; indiceColumna++) // indice columna { puntoCentro = vertices[indiceFila * CantidadPixelesAncho + indiceColumna]; if (indiceFila + 1 < CantidadPixelesAlto - 1) // Hay punto norte { puntoNorte = vertices[(indiceFila + 1) * CantidadPixelesAncho + indiceColumna]; } else { puntoNorte = this.CompletarPunto(puntoCentro); } if (indiceFila - 1 >= 0) // Hay punto sur { puntoSur = vertices[(indiceFila - 1) * CantidadPixelesAncho + indiceColumna]; } else { puntoSur = this.CompletarPunto(puntoCentro); } if (indiceColumna - 1 >= 0) // Hay punto este { puntoOeste = vertices[indiceFila * CantidadPixelesAncho + indiceColumna - 1]; } else { puntoOeste = this.CompletarPunto(puntoCentro); } if (indiceColumna + 1 < CantidadPixelesAncho - 1) // Hay punto oeste { puntoEste = vertices[indiceFila * CantidadPixelesAncho + indiceColumna + 1]; } else { puntoEste = this.CompletarPunto(puntoCentro); } normales.Add(Punto.CalcularNormal(puntoCentro, puntoNorte, puntoEste, puntoSur, puntoOeste, invertirNormal)); } } } else { for (int indiceColumna = 0; indiceColumna < CantidadPixelesAncho; indiceColumna++) // indice columna { for (int indiceFila = 0; indiceFila < CantidadPixelesAlto; indiceFila++) // indice fila { puntoCentro = vertices[indiceFila + (indiceColumna * CantidadPixelesAlto)]; if (indiceColumna + 1 < CantidadPixelesAncho - 1) // Hay punto norte { puntoNorte = vertices[(indiceColumna + 1) * CantidadPixelesAlto + indiceFila]; } else { puntoNorte = this.CompletarPunto(puntoCentro); } if (indiceColumna - 1 >= 0) // Hay punto sur { puntoSur = vertices[(indiceColumna - 1) * CantidadPixelesAlto + indiceFila]; } else { puntoSur = this.CompletarPunto(puntoCentro); } if (indiceFila + 1 < CantidadPixelesAlto) // Hay punto este { puntoEste = vertices[indiceColumna * CantidadPixelesAlto + indiceFila + 1]; } else { puntoEste = this.CompletarPunto(puntoCentro); } if (indiceFila - 1 >= 0) // Hay punto oeste { puntoOeste = vertices[indiceColumna * CantidadPixelesAlto + indiceFila - 1]; } else { puntoOeste = this.CompletarPunto(puntoCentro); } normales.Add(Punto.CalcularNormal(puntoCentro, puntoNorte, puntoEste, puntoSur, puntoOeste, invertirNormal)); } } } }
protected override void CalcularExtremos() { if (Orientacion.Equals(OrientacionesCara.Abajo)) { xInicial = 0; xFinal = Figura.LongitudX; yInicial = 0; yFinal = Figura.LongitudY; zInicial = 0; zFinal = 0; } else if (Orientacion.Equals(OrientacionesCara.Adelante)) { xInicial = Figura.LongitudX; xFinal = Figura.LongitudX; yInicial = 0; yFinal = Figura.LongitudY; zInicial = 0; zFinal = Figura.LongitudZ; } else if (Orientacion.Equals(OrientacionesCara.Arriba)) { xInicial = 0; xFinal = Figura.LongitudX; yInicial = 0; yFinal = Figura.LongitudY; zInicial = Figura.LongitudZ; zFinal = Figura.LongitudZ; } else if (Orientacion.Equals(OrientacionesCara.Atraz)) { xInicial = 0; xFinal = 0; yInicial = 0; yFinal = Figura.LongitudY; zInicial = 0; zFinal = Figura.LongitudZ; } else if (Orientacion.Equals(OrientacionesCara.Derecha)) { xInicial = 0; xFinal = Figura.LongitudX; yInicial = Figura.LongitudY; yFinal = Figura.LongitudY; zInicial = 0; zFinal = Figura.LongitudZ; } else if (Orientacion.Equals(OrientacionesCara.Izquierda)) { xInicial = 0; xFinal = Figura.LongitudX; yInicial = 0; yFinal = 0; zInicial = 0; zFinal = Figura.LongitudZ; } xInicial += Figura.Posicion.X; xFinal += Figura.Posicion.X; yInicial += Figura.Posicion.Y; yFinal += Figura.Posicion.Y; zInicial += Figura.Posicion.Z; zFinal += Figura.Posicion.Z; }