minor improvements

This commit is contained in:
Uwe Rathmann 2022-01-10 08:44:02 +01:00
parent 1dd3127f9f
commit 9f7824cd17
2 changed files with 22 additions and 15 deletions

View File

@ -64,21 +64,13 @@ namespace
return std::floor( value ) * intervalSize;
}
double divideEps( double intervalSize, double numSteps )
{
if ( numSteps == 0.0 || intervalSize == 0.0 )
return 0.0;
return ( intervalSize - ( _eps * intervalSize ) ) / numSteps;
}
double divideInterval( double intervalSize, int numSteps )
{
if ( numSteps <= 0 )
return 0.0;
const auto v = divideEps( intervalSize, numSteps );
if ( v == 0.0 )
const auto v = intervalSize / numSteps;
if ( qFuzzyIsNull( v ) )
return 0.0;
constexpr double base = 10.0;
@ -89,14 +81,19 @@ namespace
const double fraction = std::pow( base, lx - p );
uint n = base;
while ( ( n > 1 ) && ( fraction <= n / 2 ) )
n /= 2;
double stepSize = n * std::pow( base, p );
double stepSize = std::pow( base, p );
if ( v < 0 )
stepSize = -stepSize;
for ( const double f : { 2.0, 2.5, 5.0, 10.0 } )
{
if ( fraction <= f || qFuzzyCompare( fraction, f ) )
{
stepSize *= f;
break;
}
}
return stepSize;
}
}
@ -355,4 +352,12 @@ void QskScaleEngine::buildMinorTicks(
}
}
qreal QskScaleEngine::alignedStepSize( double intervalSize, int numSteps ) const
{
if ( intervalSize <= 0.0 )
return 0.0;
return divideInterval( intervalSize, numSteps );
}
#include "moc_QskScaleEngine.cpp"

View File

@ -40,6 +40,8 @@ class QSK_EXPORT QskScaleEngine
void autoScale( int maxNumSteps, qreal& x1, qreal& x2, qreal& stepSize ) const;
qreal alignedStepSize( double intervalSize, int numSteps ) const;
private:
QskIntervalF align( const QskIntervalF&, qreal stepSize ) const;