Пятница, 26.04.2024, 22:19
Приветствую Вас Гость

Программирование

Меню сайта
Наш опрос
Оцените мой сайт
Всего ответов: 0
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » 2015 » Сентябрь » 14 » Прогрессивная шкала
08:40
Прогрессивная шкала
Делал в одной программе шкалу времени от 20 секунд до 1 часа, оказалось лишним, кину сюда. Оптимизацией особо не занимался. float ScaleToTime(float scale) переводит значение от 0 до 100 в значение от TIME_MIN до TIME_MAX, при этом их зависимость будет иметь такой же, какой имеет экспонента на интервале от X_MIN до X_MAX. float TimeToScale(float time) - обратная функция. В таком виде в середине шкалы (50) получается значение 673. После 99 устанавливается MAXFLOAT. #define X_MIN 0.0f #define X_MAX 3.0f #define TIME_MAX 3600.0f #define TIME_MIN 20.0f float TimeToScale(float time) { float scale; if(time < TIME_MAX) { float yMin = exp(X_MIN); float yMax = exp(X_MAX); float k = (TIME_MAX - TIME_MIN) / (yMax - yMin); float y = (time - TIME_MIN) / k; float x = logf(y + yMin); scale = (x - X_MIN) * 100.0f / (X_MAX - X_MIN); } else { scale = 100.0f; } //NSLog(@"%f -> %f", time, scale); return scale; } float ScaleToTime(float scale) { float time = 0.0f; if(scale > 99.0f) { time = MAXFLOAT; } else { float x = X_MIN + (X_MAX - X_MIN) * scale / 100.0f; float yMin = exp(X_MIN); float yMax = exp(X_MAX); float y = exp(x) - yMin; float k = (TIME_MAX - TIME_MIN) / (yMax - yMin); time = k * y + TIME_MIN; } //NSLog(@"%f -> %f", scale, time); return time; }
Просмотров: 396 | Добавил: admin | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
Вход на сайт

Поиск
Календарь
«  Сентябрь 2015  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
282930
Архив записей