Есть время восхода и заката. Нужно сделать фон, зависимый от времени суток. В полночь - тёмный цвет, в полдень - светлый, в промежутках - смесь этих цветов с коэффициентом.
На цифрах:
Восход: 07:16.
Закат: 16:02.
Переводим для удобства всё в минуты:
hour * 60 + min
Восход: 436
Закат: 962
Находим время, когда солнце в зените, то есть точный полдень:
noonTime = (riseTime + (setTime - riseTime) / 2) % 1440;
Полдень: 699
Теперь получаем текущее время и переводим его в минуты:
time = System.currentTimeMillis() / 60000 % 1440;
Время: 705
Теперь надо высчитать коэффициент. Если текущее время ближе к полудню, то коэффициент стремится к 1. Если ближе к полуночи -> 0. Если точно равен восходу или закату солнца -> 0.5.
Очевидно, что промежуток [полдень-720 .. полдень] равен зеркальному отражению [полдень .. полдень+720]. То есть, если полдень ровно в 12, то коэффициент в 1 ночи и в 23 ночи будет одинаков, в 10 утра и в 14 дня - тоже одинаков и т.д.
if (time <= noon) {
coef = time / 720;
} else {
coef = 1 - (time - noon) / 720;
}
Всё прекрасно работает, но это для случая, когда полдень в 12:00, а полночь в 00:00. В идеале же полдень может быть 12:40, или 11:30, тогда точная формула такая:
if (time <= noon) {
coef = time / noon;
} else {
coef = 1 - (time - noon) / noon;
}
И вот теперь в 12:40 у нас 1, всё нормально, но в 00:00 всегда 0, хотя полночь может быть и в 00:30 и в 23:40 (тогда и полночь сдвинется). В общем вот именно тут и кроется проблема. Помогите вывести.
Набросал
демку на js, так нагляднее.
__________________