예제 #1
0
            public static PackedReading GetCurrentReading(DateTime now, Random rand, IReadingValues lastReading)
            {
                double averagePressure = 1014.23;
                double pressureRange   = 100.0;

                double pressure         = (rand.NextDouble() * pressureRange) - (pressureRange / 2) + averagePressure;
                double windDirectionRad = (rand.NextDouble() * Math.PI * 2.0);


                //double windDirectionDeg = Vector2D.RadiansToDegrees(windDirectionRad);
                //Vector2D windDirectionVec = new Vector2D((Math.Cos(windDirectionRad) * 2.0), (Math.Sin(windDirectionRad) * 2.0));
                //double windDirectionDeg = windDirectionVec.GetNorthRelativeClockwiseAngularDegrees();


                double averageWindSpeed = 9;
                double averageTemp      = 51.0;
                double tempRange        = 10.0;
                double averageHumM      = 79;
                double averageHumA      = 58;

                switch (now.Month)
                {
                case 1: {
                    averageWindSpeed = 10.4;
                    averageTemp      = 27.5;
                    averageHumM      = 77;
                    averageHumA      = 66;
                    break;
                }

                case 2: {
                    averageWindSpeed = 10.3;
                    averageTemp      = 30.5;
                    averageHumM      = 75;
                    averageHumA      = 62;
                    break;
                }

                case 3: {
                    averageWindSpeed = 10.6;
                    averageTemp      = 39.8;
                    averageHumM      = 76;
                    averageHumA      = 57;
                    break;
                }

                case 4: {
                    averageWindSpeed = 10.2;
                    averageTemp      = 49.9;
                    averageHumM      = 74;
                    averageHumA      = 51;
                    break;
                }

                case 5: {
                    averageWindSpeed = 8.7;
                    averageTemp      = 60.0;
                    averageHumM      = 77;
                    averageHumA      = 52;
                    break;
                }

                case 6: {
                    averageWindSpeed = 8;
                    averageTemp      = 68.4;
                    averageHumM      = 80;
                    averageHumA      = 53;
                    break;
                }

                case 7: {
                    averageWindSpeed = 7.3;
                    averageTemp      = 72.6;
                    averageHumM      = 83;
                    averageHumA      = 54;
                    break;
                }

                case 8: {
                    averageWindSpeed = 6.8;
                    averageTemp      = 71;
                    averageHumM      = 86;
                    averageHumA      = 56;
                    break;
                }

                case 9: {
                    averageWindSpeed = 7.4;
                    averageTemp      = 64.0;
                    averageHumM      = 87;
                    averageHumA      = 57;
                    break;
                }

                case 10: {
                    averageWindSpeed = 8.3;
                    averageTemp      = 52.5;
                    averageHumM      = 82;
                    averageHumA      = 55;
                    break;
                }

                case 11: {
                    averageWindSpeed = 9.7;
                    averageTemp      = 42.3;
                    averageHumM      = 79;
                    averageHumA      = 62;
                    break;
                }

                case 12: {
                    averageWindSpeed = 10.1;
                    averageTemp      = 32.5;
                    averageHumM      = 78;
                    averageHumA      = 67;
                    break;
                }
                }
                averageTemp      = UnitUtility.ConvertUnit(averageTemp, TemperatureUnit.Fahrenheit, TemperatureUnit.Celsius);
                tempRange        = 4;
                averageWindSpeed = UnitUtility.ConvertUnit(averageWindSpeed, SpeedUnit.MilesPerHour, SpeedUnit.MetersPerSec) * 4.0;

                double humidityRange = Math.Abs(averageHumM - averageHumA) * 1.5;
                double humidity      = (humidityRange * rand.NextDouble()) - (humidityRange / 2.0) + ((averageHumM + averageHumA) / 2.0);

                humidity /= 100.0;
                double temp = (rand.NextDouble() * tempRange) - (tempRange / 2.0) + averageTemp;

                double windSpeed = rand.NextDouble();

                windSpeed = (windSpeed > 0.5) ? 0 : 4.0 * averageWindSpeed * windSpeed * windSpeed;

                double windDirectionDeg = (((rand.NextDouble() * 360.0) * 4) + 90) / 5.0;           // 4 parts random, 1 part 90 degrees

                var newValues = new ReadingValues(
                    temp,
                    pressure,
                    humidity,
                    windDirectionDeg,
                    windSpeed
                    );

                if (null != lastReading && lastReading.IsValid)
                {
                    var readings = new[] { lastReading, lastReading, lastReading, newValues };

                    var meanCalc = new ReadingValuesMeanCalculator <IReadingValues>();
                }

                var stamp = now.Date.Add(new TimeSpan(now.Hour, now.Minute, now.Second));

                return(new PackedReading(
                           stamp,
                           new PackedReadingValues(newValues)
                           ));
            }