Вниз  Алгоритмизация
- 13.01.2015 / 15:09
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Dinisimys, не, так после полудня не считает совсем http://jsfiddle.net/aNNiMON/b84h8uxu/1/
__________________
 let live
- 13.01.2015 / 15:13
Dinisimys
  Пользователь

Dinisimys 
Сейчас: Offline
aNNiMON, блин, забыл
  1. var noon=760;
  2.     var midnight=40;
  3.     var time=40;
  4.     var vtime=time;
  5.     var coef;
  6.     if(time<=noon && time>midnight) {
  7.       coef=time/noon;
  8.     } else {
  9.       if(time>=0 && time<midnight) {
  10.         vtime=1440-(midnight-time);
  11.         coef=1 - (vtime - noon) / 720;
  12.       }
  13.       else if(time==midnight) coef=0;
  14.       else coef=1 - (vtime - noon) / 720;
  15.     }

- 13.01.2015 / 16:40
Dinisimys
  Пользователь

Dinisimys 
Сейчас: Offline
в 13 и 14 строке добавил условие, протестил, работает вроде все

Изменено Dinisimys (13.01 / 16:41) (всего 1 раз)
- 13.01.2015 / 16:45
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Dinisimys, уже больше похоже на правду http://jsfiddle.net/aNNiMON/b84h8uxu/7/ но всё равно в 00:39 и 00:41 - 0.05, а в 00:40 сразу в 0 перескакивает. На 5 сотых шаг, хотя в полдень 12:39 и 12:41 - 0.998, то есть 2 сотых.
Вангую, что и в 00;39 и 00:41 должно быть 0.002
__________________
 let live

Изменено aNNiMON (13.01 / 16:45) (всего 1 раз)
- 13.01.2015 / 16:49
Dinisimys
  Пользователь

Dinisimys 
Сейчас: Offline
aNNiMON, это будет задавать проблемы? ну впринцыпе, глазом врятли различишь разницу в цветах с шагом 2 или 5 сотых)) Расчет коефициента я взял из твоего кода, но можно конечно и это исправить
- 13.01.2015 / 17:12
Dinisimys
  Пользователь

Dinisimys 
Сейчас: Offline
aNNiMON, ну вот оно решение: ;-) вроде теперь должно все правильно бить
  1. var noon=760;
  2.     var midnight=40;
  3.     var time=761;
  4.     var vtime=time;
  5.     var coef;
  6.     if(time<=noon && time>midnight) {
  7.       coef=(time-midnight)/720;
  8.     } else {
  9.       if(time>=0 && time<midnight) {
  10.         vtime=1440-(midnight-time);
  11.         coef=1 - (vtime - noon+midnight) / 720;
  12.       }
  13.       else if(time==midnight) coef=0;
  14.       else coef=1 - (vtime - noon) / 720;
  15.     }

- 13.01.2015 / 17:51
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Dinisimys, отлично, только теперь, если полночь у нас в 23:55 - 1435, то всё ломается :lol:
__________________
 let live
- 13.01.2015 / 18:01
Ксакеп
  Модератор форума

Ксакеп 
Сейчас: Offline
aNNiMON, http://jsfiddle.net/b84h8uxu/15/ совсем уже с ума посходили.

Единственный минус — получилась линейная функция какая-то на [0, 1].

Если не ошибаюсь, то солнечный день всё же как-то более менее похож на синусоиду, то есть так:
http://jsfiddle.net/b84h8uxu/14/

  1. // 0 <= coef <= 1.
  2. coef = Math.sin(3.1415926 / 2 * coef);

Сначала темно-темно, затем достаточно внезапно светлеет, потом держится день, и снова также внезапно (но плавно) темнеет.

Изменено Ксакеп (13.01 / 18:13) (всего 4 раза)
- 13.01.2015 / 18:13
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Ксакеп, если полночь будет в 23:55, то твой вариант не верен.

Я в принципе придумал решение. Сама задача немого неправильно звучала - я отбросил время рассвета и заката, а надо было с ними плясать. Сейчас нарисую..
__________________
 let live
- 13.01.2015 / 18:17
Ксакеп
  Модератор форума

Ксакеп 
Сейчас: Offline
aNNiMON, не суть. coef ставится под модуль, а midnight == -5.
Забыл сказать, что контракт: midnight < noon.

Изменено Ксакеп (13.01 / 18:18) (всего 1 раз)
Наверх  Всего сообщений: 127
Фильтровать сообщения
Поиск по теме
Файлы топика (2)