Автоматический выбор масштаба для графиков.
Задача такая: Есть сетка, на оси ординат всегда десять делений. Нужно, чтобы шаг был "хорошим", т.е. такого вида: 1, 2, 1.5, 0.003, а не такого: 0.342354. Кроме того, нужно чтобы график заполнял почти всю сетку, а не ютился где-нибудь внизу.
Я пока придумал следующее:
берем max и min графика, вычисляем delta=max-min. Если delta по модулю больше 9 (т.к. 10 делений), то вычисляем k=delta/9 (т.е. целочисленное делние) и rem=delta%9 (остаток). Если k меньше rem, то делаем delta++, пока он не станет больше rem, при этом к становится искомым шагом по оси ординат.
Если delta по модулю меньше 9, то делаем практически то же самое с небольшими изменениями (вначале умножаем delta достаточное число раз на 10).
Хотя мой алгоритм во многих случаях дает то что надо, все же иногда шаг выбирается неоптимально.
У меня есть подозрение, что все можно сделать более остроумно. Посоветуйте плиз...
беру разность между max и мин, делю на десять, определяю порядок p получившегося числа. Т.е. для 8.2341 это 1, для 198.45 - это 3, для 0.08745 - это -2. А затем округляю в большую сторону до порядка p-2. Получаю соответственно 8.24, 199, 0.0875 и т.п. Не очень красиво, но лучшего придумать не могу.
Если кто-то делал автоматический выбор шага - отзовитесь.