我已经计算出图表上某个轴的步进大小。
我也有最小值和最大值。现在,我需要计算所有刻度,以便可以显示我的最小值和最大值之间的所有值。
例如:
步长:1000
最小值:213
最大:4405
预期的价格变动:0,1000,2000,3000,4000,5000
步长:500
最小值:-1213
最大:1405
预期的价格变动:-1500,-1000,-500,0,500,1000,1500
直到现在,我一直在尝试使用“ try and error”来计算第一个值:
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);
然后在此列表中添加步骤,直到所有值都适合为止。
这对我来说似乎很脏,我想知道是否还有其他解决方案。
所以我需要的是一种解决方案,可以计算出我需要的第一个刻度。
答案 0 :(得分:1)
此函数计算第一步和最后一步的值:
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;
}
}
答案 1 :(得分:0)
您可以使用整数舍入到较低和较高的值来计算轴限制
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)