示例#1
0
        /// <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;
                }
            }
        }
示例#2
0
        /// <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);
        }
示例#3
0
 /// <summary>
 /// コピーを作成する
 /// </summary>
 /// <param name="lead">Lead_Car</param>
 public Lead_Car(Lead_Car lead)
 {
     ID  = lead.ID;
     gap = lead.gap;
 }