public new void Update() { if ((this.timeToUpdate.IsTimeToAct()) && (this.ponteiroDestino != null)) { double deltaAngulo = angulos.toRadianos(AnguloEntreVetores(this.ponteiroAtual - this.ponteiroCentral, this.ponteiroDestino - this.ponteiroCentral)); //se os ponteiros atual e destinho não estiverem pertos, //continua movimentando o ponteiro atual até chegar perto //vetorialmente do vetor destino. if ((ponteiroAnterior != null) && (!isSentidoHorarioDeRotacao)) { ponteiroAnterior = new vetor2(ponteiroAtual); ponteiroAtual = ponteiroAtual.RotacionaVetor(angulos.toRadianos(+deltaAngulo / 0.5)); } // if else { ponteiroAnterior = new vetor2(ponteiroAtual); ponteiroAtual = ponteiroAtual.RotacionaVetor(angulos.toRadianos(-deltaAngulo / 0.5)); } // else if (vetor2.Distancia(ponteiroAtual, ponteiroDestino) < 1.5) { this.PonteiroDirecao = new vetor2(this.ponteiroAtual - this.ponteiroCentral); // guarda a posição e direção na variável de consulta fora do componente. }//if }// if } // Update()
} // AnguloEntreVetores() //sentido anti-horário se omega>0 //sentido horário se omega<0 private bool IsSentidoHorario(vetor2 v1, vetor2 vdestino) { vetor2 vSentidoAntiHorario = new vetor2(v1); vetor2 vSentidoHorario = new vetor2(v1); vSentidoAntiHorario = vSentidoAntiHorario.RotacionaVetor(+1.0); // sentido anti-horário; vSentidoHorario = vSentidoHorario.RotacionaVetor(-1.0); // sentido horário, if (vetor2.Distancia(vSentidoAntiHorario, vdestino) < vetor2.Distancia(vSentidoHorario, vdestino)) { return(false); } if (vetor2.Distancia(vSentidoAntiHorario, vdestino) < vetor2.Distancia(vSentidoHorario, vdestino)) { return(true); } return(true); } // IsClockWiseRotation()