-2
我當前的代碼是一個計時器內保持比較if all drones actual position is near desired position
但我不認爲這是最好的方法,因爲我認爲這會導致降低處理速度。C# - Peek隊列隨着時間的推移沒有計時器。可能嗎?
有沒有一種方法來檢查,如果實際位置靠近期望的位置,而無需使用定時器裏面偷看?
private void timer_missao_Tick(object sender, EventArgs e)
{
string[] pontos_separados = null;
for (int k = 0; k < drone.Length; k++)
{
if (queue[k].Count > 0)
{
if (queue[k].Peek() == "levantar")
{
drone[k]._droneClient.FlatTrim();
drone[k]._droneClient.Takeoff();
drone[k].subir_ate_altura = true;
queue[k].Dequeue();
}
else if (queue[k].Peek().Split(null)[0] == "goto")
{
pontos_separados = queue[k].Peek().Split(null)[1].Split(',');
drone[k].posicao_desejada = new PointF(Convert.ToSingle(pontos_separados[0]), Convert.ToSingle(pontos_separados[1]));
int precisao = 5;
if (drone.All(d=> d.pos_atual().X > d.pos_desej().X - precisao && d.pos_atual().X <d.pos_desej().X + precisao &&
d.pos_atual().Y > d.pos_desej().Y - precisao && d.pos_atual().Y < d.pos_desej().Y + precisao))
{
for (int i = 0; i < drone.Length; i++)
{
queue[i].Dequeue();
}
}
}
else if (queue[k].Peek() == "aterrar")
{
drone[k]._droneClient.Land();
if (drone[k]._droneClient.NavigationData.State == NavigationState.Landed)
{
queue[k].Dequeue();
}
}
drone_actual位置被更新每秒30次。 – user7569125
@ user7569125:嗯,你確實有一些代碼,讀取無人駕駛飛機位置,對不對?例如。來自網絡或類似者。這個代碼就像這樣的僞代碼'var message = ReadNextMessage(); if(message.Type ==「Movement」){drones [message.DroneID] .Position = message.NewPosition; }'既然在這裏你必須已經移動無人機的參考,你也可以這樣做'CheckIfNear(無人機);'了'Position'分配之後。 –