| Статистика |
Онлайн всего: 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;
}
|
|
Просмотров: 446 |
Добавил: admin
| Рейтинг: 0.0/0 |
|
| Календарь |
| « Сентябрь 2015 » |
| Пн |
Вт |
Ср |
Чт |
Пт |
Сб |
Вс |
| | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 10 | 11 | 12 | 13 | | 14 | 15 | 16 | 17 | 18 | 19 | 20 | | 21 | 22 | 23 | 24 | 25 | 26 | 27 | | 28 | 29 | 30 | |
|