/// <summary> /// 車両位置を更新する /// </summary> public void update_position() { Lead_Car LC = new Lead_Car(lead_car); int ID = LC.ID; while (true) { _move_position(ID); if (ID == LC.ID) { lead_car.gap = car[ID].running.gap; } else { if (lead_car.gap < car[ID].running.gap) { lead_car.gap = car[ID].running.gap; lead_car.ID = ID; } } ID = car[ID].running.around.rear; if (ID == LC.ID) { int front = car[ID].running.around.front; double front_rear_position = car[front].running.position.current - car[front].eigenvalue.length; if (front_rear_position < 0) { front_rear_position += parameter.length; } if (front_rear_position < car[ID].running.position.current) { front_rear_position += parameter.length; } car[ID].running.gap = front_rear_position - car[ID].running.position.current; if (lead_car.gap < car[ID].running.gap) { lead_car.gap = car[ID].running.gap; lead_car.ID = ID; } break; } } }
/// <summary> /// 車両を均等に並べ,前後関係を記録する /// </summary> /// <returns>配置出来たらtrue,重なったらfalse</returns> private bool __position_deploy() { bool fg = true; lead_car = new Lead_Car(); //!!!!並列計算禁止!!!! //後方車両から,順番に車両を車間距離が同じになるように並べる double distance; if (Mode == SimulationMode.PolarizationInitialMode) { distance = 1; } else { distance = (parameter.length - all_length) / N; } if (distance < 1) { Console.WriteLine("車両を重ならないように配置することが不可能です"); Console.ReadLine(); fg = false; } car[N - 1].running.position.current = car[N - 1].running.position.previous = 0; car[N - 1].running.around.front = 0; car[N - 1].running.around.rear = N - 2; car[N - 1].running.gap = distance; for (int i = N - 2; i >= 0; i--) { double next_postion = new double(); if (i == N - 2) { next_postion = parameter.length; } else { next_postion = car[i + 1].running.position.current; } next_postion -= car[i + 1].eigenvalue.length + distance; car[i].running.position.current = car[i].running.position.previous = next_postion; car[i].running.around.front = i + 1; car[i].running.around.rear = i - 1; car[i].running.gap = distance; } car[0].running.around.rear = N - 1; double xF = car[0].running.position.current - car[0].eigenvalue.length; if (xF < 0) { xF += parameter.length; } double x = car[N - 1].running.position.current; double gap = xF - x; if (gap < 0) { gap += parameter.length; } car[N - 1].running.gap = gap; lead_car.ID = N - 1; lead_car.gap = gap; return(fg); }
/// <summary> /// コピーを作成する /// </summary> /// <param name="lead">Lead_Car</param> public Lead_Car(Lead_Car lead) { ID = lead.ID; gap = lead.gap; }