Иллюстрированный самоучитель по Visual Studio.Net



Вспомогательная функция


Напомним, что идеи, заложенные в алгоритме выработки цифровой метки на оси графика, принадлежат Александру Калимову, а сам алгоритм разрабатывался при его активном участии. Функция Make Label понадобилась нам в связи с тем, что переход к экспоненциальной форме числа требует некоторых усилий. Мы надеемся, что он будет происходить достаточно редко, так как алгоритм генерации цифровой метки использует методику «жизни без порядка в диапазоне семи порядков», описанную выше. Однако если все-таки диапазон изменения функции или даже координаты X выйдет за обозначенные пределы, то экспоненциальная форма неизбежна. При всем этом мы должны попытаться не делать метку слишком длинной. Экспоненциальная форма создается нами так, чтобы она была более компактной. Если доверить эту работу функциям системы, то они припишут ' знак порядка и лидирующие нули, от которых необходимо избавиться. Но если ее укоротить слишком сильно, то невозможно будет различить две соседние метки. Поэтому при определении количества необходимых разрядов мантиссы анализируется шаг сетки вдоль текущей оси графика. Вся эта черновая работа и производится в теле функции MakeLabel:

CString CGraph::MakeLabel(bool bX, doubles v) {

CString s = "0.0";

if (v == 0.)

return s;

//====== Сначала делаем грубую прикидку

//====== Пробуем поместиться в 20 позиций

s.Format("%20.10f",v);

//====== Выясняем порядок шага сетки,

//====== переворачивая его знак (трюк)

int nDigits = int(ceil(-loglO(bХ ?m_DataX.Step

: m_DataY.Step)) ) ;

//====== Если все изменения происходят до запятой,

//====== то цифры после запятой нас не интересуют

if (nDigits <= 0)

nDigits = -1;

else

if(bХ)

nDigits++; // Эстетическая добавка

//====== Слева усекаем все

s .TrimLeft () ;

//====== Справа оставляем минимум разрядов

s = s.Left(s.Find(".") + nDigits + 1);

int iPower = bX ? m_DataX.Power : m_DataY.Power;

( //====== Нужен ли порядок?

if (iPower != 0)

{

//=== Нужен, если не поместились в (10"-3, 10А+4)



Содержание  Назад  Вперед