좌표 축 범위 및 눈금 적응 알고리즘
1997 단어 개인 노트
나 는 눈금 을 고정 시 키 고 도 표를 아름 답 게 보 여 주 었 기 때문에 원 블 로 거 알고리즘 을 수정 했다.
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);
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Lua의 몇 가지 계산 공식텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.