public Vetor PosicaoEm(double tempo) { const double GRAVIDADE = 9.80665; Vetor g = new Vetor(0, 0, GRAVIDADE); double t = tempo - disparadoEm; return(canhao + (t * velocidade) - (g * t * t) / 2); }
public Tiro(Vetor canhao, double anguloAzimute, double anguloElevacao, double disparadoEm) { this.canhao = canhao; this.disparadoEm = disparadoEm; velocidade = new Vetor( Math.Cos(anguloElevacao) * Math.Cos(anguloAzimute), Math.Cos(anguloElevacao) * Math.Sin(anguloAzimute), Math.Sin(anguloElevacao)) * VELOCIDADEMEDIA; }
public Vetor PosicaoEm(double elapsed) { Vetor posicaoAtual = Trajetoria.PosicaoEm(elapsed - tempoTroca); if (vaiDesistir && (alvo - posicaoAtual).Mag() < 3000) { vaiDesistir = false; tempoTroca = elapsed; Console.WriteLine("Desistiu de atacar"); Trajetoria = new Trajetoria3(posicaoAtual, alvo); } else if (tempoParaTrocarRota > -1 && elapsed > tempoParaTrocarRota) { tempoParaTrocarRota = -1; tempoTroca = elapsed; Console.WriteLine("Trajetoria 1"); Trajetoria = new Trajetoria1(alvo, posicaoAtual); } return(Trajetoria.PosicaoEm(elapsed - tempoTroca)); }
public Trajetoria3(Vetor posicaoEntrada, Vetor posicaoSaida) : base(posicaoEntrada.SetZ(ALTITUDE), posicaoSaida.SetZ(ALTITUDE)) { }
public Trajetoria2(Vetor centro, double anguloEntrada, double anguloExtra) : this(centro.To(anguloEntrada, RAIO), centro + (centro - centro.To(anguloEntrada, RAIO)).RotateZ(anguloExtra)) { this.AnguloEntrada = anguloEntrada; this.AnguloExtra = anguloExtra; }
public Canhao(Vetor posicao) { Posicao = posicao; TirosRestantes = 4; Tiros = new Tiro[TirosRestantes]; }
public Trajetoria1(Vetor centro, Vetor posicaoEntrada) : base(posicaoEntrada.SetZ(ALTITUDE), centro.SetZ(ALTITUDE)) { }
public Trajetoria1(Vetor centro, double anguloEntrada) : this(centro, centro.To(anguloEntrada, RAIO)) { this.AnguloEntrada = anguloEntrada; }
protected Trajetoria(Vetor origem, Vetor destino) { this.Origem = origem; this.Destino = destino; }
public double AnguloEntre(Vetor v) { return(Math.Acos((this * v) / (this.Mag() * v.Mag()))); }
public Vetor RotateZ(double angle, Vetor center) { return((this - center).RotateZ(angle) + center); }