private int frames; // на сколько кадров вперед идет расчет // компонента отвечающая за расчет погоды public List <WeatherCadr> GetWeatherFromBegin(IUserID user, string map, string weather) { frames = 50; // порция кадров // дай мне графику(набор кадров вперед) для этой карты для этой погоды в это время // считается что можно указывать файлик погоды. типа например есть карта россии // для нее есть погода в январе, в феврале .... и соответственно файлики называются. загружаем и смотрим List <Graphics> workFrames = new List <Graphics>(); // этот буффер и отдадим // загрузим данные FileManagement.FileManager fm = Fabric.GetFileManager(); string[] mapBuffer = fm.GetThisFile(user, map); // буффер карты string[] weatherBuffer = fm.GetThisFile(user, weather); // буффер погоды // // прочитаем заполним структуры в WeatherCalculator WeatherCalculator wcalc = new WeatherCalculator(); wcalc.setTime = 0; // прочитаем карту сначала string[] lines = mapBuffer[0].Split(default(string[]), StringSplitOptions.RemoveEmptyEntries); wcalc.SetRect(Convert.ToDouble(lines[0]), Convert.ToDouble(lines[1])); // установили размеры карты for (int i = 1; i < mapBuffer.Length; i++) { string[] lines1 = mapBuffer[i].Split(default(string[]), StringSplitOptions.RemoveEmptyEntries); double X = Convert.ToDouble(lines1[0]); double Y = Convert.ToDouble(lines1[1]); double R = Convert.ToDouble(lines1[2]); double VALUE = Convert.ToDouble(lines1[3]); double COND = Convert.ToDouble(lines1[4]); Land tmp = new Land(X, Y, R, VALUE, COND); wcalc.AddLand(tmp); } // теперь прочитаем файл погоды. // добавим циклоны int pos = 0; for (int i = 1; i < weatherBuffer.Length; i++) { string[] lines1 = weatherBuffer[i].Split(default(string[]), StringSplitOptions.RemoveEmptyEntries); if (lines1.Length != 0) // это условие отбросит строчки после пустой(траектории там для циклонов, если это погода) { double X = Convert.ToDouble(lines1[0]); double Y = Convert.ToDouble(lines1[1]); double R = Convert.ToDouble(lines1[2]); double VALUE = Convert.ToDouble(lines1[3]); double COND = Convert.ToDouble(lines1[4]); Cyclone tmp = new Cyclone(X, Y, R, VALUE, COND); wcalc.AddWeather(tmp); } else { pos = i; break; } } // к циклонам добавим траектории пути if (pos != 0) { pos++; for (int i = 0; i < weatherBuffer.Length - pos; i++) { if (weatherBuffer[i + pos].Length != 0) { List <double[]> add = new List <double[]>(); string[] tmp = weatherBuffer[i + pos].Split(default(string[]), StringSplitOptions.RemoveEmptyEntries); for (int t = 0; t < tmp.Length; t += 2) { add.Add(new double[2] { Convert.ToDouble(tmp[t]), Convert.ToDouble(tmp[t + 1]) }); } wcalc.AddWeatherPath(i, add); } } } // все структуры заполнены List <WeatherCadr> answer = new List <WeatherCadr>(); for (int i = 0; i < frames; i++) { answer.Add(wcalc.CalculateTact());// рассчитали такт еще один и положили в ролик } return(answer); // return workFrames; }
public List <WeatherCadr> GetWeatherFromCadr(WeatherCadr cadr, int time, IUserID user, string weather) { frames = 10; // порция кадров // нам нужно в память загрузить кадо WeatherCalculator wcalc = new WeatherCalculator(); wcalc.setTime = time; // добавим землю for (int i = 0; i < cadr.Land.Count; i++) { Land t = (Land)cadr.Land[i]; Land tmp = new Land(t.X, t.Y, t.R, t.V, t.C); wcalc.AddLand(tmp); } // добавим циклоны for (int i = 0; i < cadr.Weather.Count; i++) { Cyclone t = (Cyclone)cadr.Weather[i]; Cyclone tmp = new Cyclone(t.X, t.Y, t.R, t.V, t.C); wcalc.AddWeather(tmp); } // добавим траектории циклонов FileManagement.FileManager fm = Fabric.GetFileManager(); string[] weatherBuffer = fm.GetThisFile(user, weather);// буффер погоды string[] lines = weatherBuffer[0].Split(default(string[]), StringSplitOptions.RemoveEmptyEntries); wcalc.SetRect(Convert.ToDouble(lines[0]), Convert.ToDouble(lines[1])); int pos = 0; for (int i = 1; i < weatherBuffer.Length; i++) { string[] lines1 = weatherBuffer[i].Split(default(string[]), StringSplitOptions.RemoveEmptyEntries); if (lines1.Length == 0) // это условие отбросит строчки после пустой(траектории там для циклонов, если это погода) { pos = i; break; } } if (pos != 0) { pos++; for (int i = 0; i < weatherBuffer.Length - pos; i++) { if (weatherBuffer[i + pos].Length != 0) { List <double[]> add = new List <double[]>(); string[] tmp = weatherBuffer[i + pos].Split(default(string[]), StringSplitOptions.RemoveEmptyEntries); for (int t = 0; t < tmp.Length; t += 2) { add.Add(new double[2] { Convert.ToDouble(tmp[t]), Convert.ToDouble(tmp[t + 1]) }); } wcalc.AddWeatherPath(i, add); } } } // все заполнили List <WeatherCadr> answer = new List <WeatherCadr>(); for (int i = 0; i < frames; i++) { answer.Add(wcalc.CalculateTact());// рассчитали такт еще один и положили в ролик } return(answer); }