コード例 #1
0
        public static WeatherObject NextDay(WeatherObject lastDay)
        {
            int averageTemp = 0;
            int season      = 0;

            switch (lastDay.Date.Month)
            {
            case 1:
            case 2:
            case 12:
                averageTemp = (int)RandomBiasedPow(lastDay.High - 7, lastDay.High + 4, 3, lastDay.High);
                if (averageTemp < -3)
                {
                    averageTemp = -3;
                }
                if (averageTemp > 8)
                {
                    averageTemp = 8;
                }

                season = 0;
                break;

            case 3:
            case 4:
            case 5:
                averageTemp = (int)RandomBiasedPow(lastDay.High - 7, lastDay.High + 7, 3, lastDay.High);
                if (averageTemp < 5)
                {
                    averageTemp = 5;
                }
                if (averageTemp > 12)
                {
                    averageTemp = 12;
                }
                season = 1;
                break;

            case 6:
            case 7:
            case 8:
                averageTemp = (int)RandomBiasedPow(lastDay.High - 4, lastDay.High + 7, 3, lastDay.High);
                if (averageTemp < 7)
                {
                    averageTemp = 7;
                }
                if (averageTemp > 18)
                {
                    averageTemp = 18;
                }
                season = 2;
                break;

            case 9:
            case 10:
            case 11:
                averageTemp = (int)RandomBiasedPow(lastDay.High - 7, lastDay.High + 7, 3, lastDay.High);
                if (averageTemp < 5)
                {
                    averageTemp = 5;
                }
                if (averageTemp > 12)
                {
                    averageTemp = 12;
                }
                season = 3;
                break;

            default:
                break;
            }
            int maxTemp = averageTemp + r.Next(1, 5);
            int minTemp = averageTemp - r.Next(1, 5);

            return(new WeatherObject(lastDay.Date.AddDays(1), maxTemp, minTemp, ChooseWeatherType(maxTemp, minTemp, season, (int)lastDay.Type), (int)RandomBiasedPow(1, 70, 4, 10), ChooseWindDirection(), (int)RandomBiasedPow(20, 100, 5, 70)));
        }
コード例 #2
0
        public static string GenerateOneDay(WeatherObject day, string output)
        {
            string border = "Weather/one.png";


            var fontCollection = new FontCollection();
            var parentFont     = fontCollection.Install("Weather/main.ttf").CreateFont(70, FontStyle.Bold);
            var childFont      = new Font(parentFont, 90);
            var subFont        = new Font(parentFont, 35);

            using (Image <Rgba32> backgroundImage = Image.Load(border))
            {
                int    imageX  = 105;
                string maxTemp = day.High + "°C";
                string minTemp = day.Low + "°C";

                var maxSize = TextMeasurer.Measure(maxTemp, new RendererOptions(parentFont));

                var maxOffset = 180 - maxSize.Width / 2;

                var minSize = TextMeasurer.Measure(minTemp, new RendererOptions(parentFont));

                var minOffset = 405 - minSize.Width / 2;

                string dayString = DateTime.Today.ToString($"ddd, dd MMM");

                var dateSize = TextMeasurer.Measure(dayString, new RendererOptions(parentFont));

                var dateOffset = 307 - dateSize.Width / 2;

                string windDescriptor = "";
                if (day.WindSpeed < 15)
                {
                    windDescriptor = "Light";
                }
                if (day.WindSpeed >= 15 && day.WindSpeed < 30)
                {
                    windDescriptor = "Moderate";
                }
                if (day.WindSpeed >= 30 && day.WindSpeed < 60)
                {
                    windDescriptor = "Strong";
                }
                if (day.WindSpeed >= 60)
                {
                    windDescriptor = "Gale Force";
                }

                string wind = $"{windDescriptor}, {day.WindSpeed} km/h {day.WindDirection}";

                var windSize = TextMeasurer.Measure(wind, new RendererOptions(subFont));

                var windOffset = 307 - windSize.Width / 2;

                Coords.GeoDate = day.Date;
                string sunrise = "Sunrise: " + Coords.CelestialInfo.SunRise.GetValueOrDefault().ToString("hh:mm tt");
                string sunset  = "Sunset: " + Coords.CelestialInfo.SunSet.GetValueOrDefault().ToString("hh:mm tt");

                var sunriseSize = TextMeasurer.Measure(sunrise, new RendererOptions(subFont));

                var sunriseOffset = 307 - sunriseSize.Width / 2;

                var sunsetSize = TextMeasurer.Measure(sunset, new RendererOptions(subFont));

                var sunsetOffset = 307 - sunsetSize.Width / 2;

                string humidity     = "Humidity: " + day.Humidity + "%";
                var    humiditySize = TextMeasurer.Measure(humidity, new RendererOptions(subFont));

                var humidityOffset = 307 - humiditySize.Width / 2;

                var image1 = Image.Load($"Weather/{day.Type.ToString()}.png");
                backgroundImage.Mutate(x => x.DrawImage(image1, 1, new Point(imageX, 825)).DrawText(dayString, parentFont, Rgba32.Black, new PointF(dateOffset, 370)).DrawText(maxTemp, childFont, Rgba32.Black, new PointF(maxOffset, 445)).DrawText(minTemp, childFont, Rgba32.FromHex("#4E4E4E"), new PointF(minOffset, 445)).DrawText(wind, subFont, Rgba32.Black, new PointF(windOffset, 570)).DrawText(sunrise, subFont, Rgba32.Black, new PointF(sunriseOffset, 620)).DrawText(sunset, subFont, Rgba32.Black, new PointF(sunsetOffset, 670)).DrawText(humidity, subFont, Rgba32.Black, new PointF(humidityOffset, 720)));

                backgroundImage.Save($"Weather/{output}.png");
                return($"Weather/{output}.png");
            }
        }