Рассчитать отметки оси для графика с шагом - PullRequest
0 голосов
/ 29 марта 2019

Я рассчитал размер шага для оси на графике.

Также у меня есть Min и Max -Values.Теперь мне нужно вычислить все тики, чтобы можно было отобразить все значения между моим минимальным и максимальным значениями.

Например:

Размер шага: 1000

Мин: 213

Макс .: 4405

Ожидаемые тики: 0,1000,2000,3000,4000,5000


Размер шага: 500

Мин .: -1213

Макс .: 1405

Ожидаемые тики: -1500, -1000, -500,0,500,1000,1500

До сих пор я пытаюсь вычислить первое значение с помощью "try"и ошибка "как:

bool firstStepSet = false;
double firstStep = stepSize;
do
{
    if (xValue >= (firstStep - (stepSize / 2)) && xValue <= 
    (firstStep + (stepSize / 2)))
    {
        firstStepSet = true;
        this.myBarXValues.Add(firstStep, 0);
    }
    else if (xValue > stepSize)
    {
        firstStep += stepSize;
    }
    else
    {
        firstStep -= stepSize;
    }
}
while (!firstStepSet);

И после этого я добавляю шаги в этот список, пока все значения не подходят.

Это кажется мне довольно грязным, и я хочу знать, есть лидругое решение.

Итак, мне нужно решение, которое рассчитывает первый тик, который мне нужен.

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Эта функция вычисляет значения первого и последнего шага:

static void CalcSteps(int min, int max, int stepSize, out int firstStep, out int lastStep)
{
    if (min >= 0)
    {
        firstStep = (min / stepSize) * stepSize;
    }
    else
    {
        firstStep = ((min - stepSize + 1) / stepSize) * stepSize;
    }

    if (max >= 0)
    {
        lastStep = ((max + stepSize - 1) / stepSize) * stepSize;
    }
    else
    {
        lastStep = (max / stepSize) * stepSize;
    }
}
0 голосов
/ 29 марта 2019

Вы можете рассчитать пределы оси, используя целочисленное округление до более низких и более высоких значений

low = stepsize * (min / stepsize)  //integer division needed
high = stepsize * ((max + stepsize - 1) / stepsize)

Пример кода Python возвращает пределы и количество тиков (на один больше, чем количество интервалов)

def getminmax(minn, maxx, step):
    low = (minn // step)
    high = (maxx + step - 1) // step
    ticks = high - low + 1
    return low * step, high * step, ticks


print(getminmax(213, 4405, 1000))
print(getminmax(-1213,1405, 500))

(0, 5000, 6)
(-1500, 1500, 7)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...