public static TGCVector3 MoverPosicionEnDireccionCoordenadaEsferica(TGCVector3 posicion, CoordenadaEsferica coordenadaEsferica, float speed, float timeLapse) { float x = posicion.X + speed * coordenadaEsferica.GetXCoord() * timeLapse; float y = posicion.Y + speed * coordenadaEsferica.GetYCoord() * timeLapse; float z = posicion.Z + speed * coordenadaEsferica.GetZCoord() * timeLapse; return(new TGCVector3(x, y, z)); }
/** * Devuelve la posicion inicial desde donde sale el misil en funcion de la posicion y la rotacion de la nave. * */ private TGCVector3 CalcularPosicionInicialMisil() { //Random de las 4 opciones posibles de caniones Random random = new Random(); int canion = (int)Math.Round(random.NextDouble() * 4); int signo = 0; bool canionInferior = false; //Caniones izquierdos o derechos if (canion == 0 || canion == 2) { signo = 1; } else { signo = -1; } //Caniones inferiores o superiores if (canion == 2 || canion == 3) { canionInferior = true; } else { canionInferior = false; } //Delta en la direccion nave (para que no parezca que sale de atras) TGCVector3 deltaDireccionNave = new TGCVector3(coordenadaEsferica.GetXYZCoord() * DISTANCIA_ORIGEN_MISIL_DIRECCION_NAVE); //Delta en la direccion ortogonal a la direccion de la nave (para que salga desde alguna de las alas) //Caniones inferiores if (canionInferior) { CoordenadaEsferica direccionOrtogonal = new CoordenadaEsferica(coordenadaEsferica.acimutal + (FastMath.PI / 2) * signo, FastMath.PI / 2 + EXTRA_ANGULO_POLAR_CANION_ABAJO); TGCVector3 deltaOrtogonalNave = new TGCVector3(direccionOrtogonal.GetXYZCoord() * DISTANCIA_ORIGEN_MISIL_DIRECCION_ORTOGONAL); return(CommonHelper.SumarVectores(CommonHelper.SumarVectores(GetPosition(), deltaDireccionNave), deltaOrtogonalNave)); } else //Caniones superiores { CoordenadaEsferica direccionOrtogonal = new CoordenadaEsferica(coordenadaEsferica.acimutal + (FastMath.PI / 2) * signo, FastMath.PI / 2); TGCVector3 deltaOrtogonalNave = new TGCVector3(direccionOrtogonal.GetXCoord() * DISTANCIA_ORIGEN_MISIL_DIRECCION_ORTOGONAL, direccionOrtogonal.GetYCoord() * DISTANCIA_ORIGEN_MISIL_DIRECCION_ORTOGONAL, direccionOrtogonal.GetZCoord() * DISTANCIA_ORIGEN_MISIL_DIRECCION_ORTOGONAL); return(CommonHelper.SumarVectores(CommonHelper.SumarVectores(GetPosition(), deltaDireccionNave), deltaOrtogonalNave)); } }