坐标轴范围及刻度的自适应算法
本文参考博客:http://blog.csdn.net/heyzol/article/details/22912389
由于我是固定了刻度数,美观的呈现图表,所以在原博主算法上进行了修改
var calculateRulerMark = function(arrMark, numMin, numMax, iHeight, iActualMarkNum)
{
if(numMax <= numMin)
{
return;
}
var iMinMark = numMin;
var iMaxMark = numMax;
var iSuggestMarkNum = parseInt(iHeight / 20) + 1;
//传了实际的进来说明,实际的比建议的大
iActualMarkNum = iActualMarkNum ? iActualMarkNum - 1 : iSuggestMarkNum;
var iSuggestStep = (numMax - numMin) / iActualMarkNum;
var iBase = Math.pow(10, parseInt(Math.log(iSuggestStep)/Math.log(10)));
if(iBase != iSuggestStep)
{
iBase = 10 * iBase;
}
var iTempStep = (iSuggestStep / iBase).toFixed(6);
// 常规步长 0.1, 0.2, 0.25, 0.5 , 1
if(iTempStep >= 0 && iTempStep <= 0.1)
{
iTempStep = 0.1;
}
else if(iTempStep >=0.100001 && iTempStep <= 0.2)
{
iTempStep = 0.2;
}
else if(iTempStep >= 0.200001 && iTempStep <= 0.25)
{
iTempStep = 0.25;
}
else if(iTempStep >= 0.250001 && iTempStep <= 0.5)
{
iTempStep = 0.5
}
else
{
iTempStep = 1;
}
iTempStep = iTempStep * iBase;
//判断最小刻度是否需要+1
if(parseInt(numMin / iTempStep) != numMin / iTempStep)
{
if(numMin < 0)
{
iMinMark = (-1) * Math.ceil(Math.abs(numMin/iTempStep))*iTempStep;
}
else
{
iMinMark = parseInt(Math.abs(numMin/iTempStep))*iTempStep;
}
}
//判断最大刻度是否需要+1
if(parseInt(numMax / iTempStep) != numMax / iTempStep)
{
if(numMax < 0)
{
iMaxMark = (-1) * Math.floor(Math.abs(numMax/iTempStep))*iTempStep;
}
else
{
iMaxMark = parseInt(numMax/iTempStep + 1)*iTempStep;
}
}
var iTempMarkNum = (iMaxMark - iMinMark) / iTempStep + 1;
if(iTempMarkNum > iSuggestMarkNum)
{
calculateRulerMark(arrMark, numMin, numMax, iHeight, iActualMarkNum)
}
else
{
iSuggestMarkNum = iTempMarkNum;
for(var i = 0; i < iSuggestMarkNum; i++)
{
arrMark.push(iMinMark+ iTempStep * i);
}
}
} 相关推荐
大史哥哥 2020-07-26
HongAndYi 2020-05-01
somboy 2020-02-29
牧灵泉的崖巢 2019-05-09
lengyuyan00 2019-04-23
ateacup 2019-03-22
zhangzhiyu 2019-03-21
wayway0 2018-05-25
laohyx 2018-05-04
bush 2018-05-04
jacktangj 2018-04-09
dengfan 2018-02-07
Haopython 2015-05-20
图形学与OpenGL 2012-12-18
sxaudq0 2012-12-14
PythonGCS 2018-12-13
运营大湿兄 2017-12-11
深圳湾 2017-12-11