좌표 축 범위 및 눈금 적응 알고리즘

1997 단어 개인 노트
본문 참고 블 로그: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);
		}
	}
}

좋은 웹페이지 즐겨찾기