minor improvements
This commit is contained in:
parent
1dd3127f9f
commit
9f7824cd17
|
@ -64,21 +64,13 @@ namespace
|
||||||
return std::floor( value ) * intervalSize;
|
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 )
|
double divideInterval( double intervalSize, int numSteps )
|
||||||
{
|
{
|
||||||
if ( numSteps <= 0 )
|
if ( numSteps <= 0 )
|
||||||
return 0.0;
|
return 0.0;
|
||||||
|
|
||||||
const auto v = divideEps( intervalSize, numSteps );
|
const auto v = intervalSize / numSteps;
|
||||||
if ( v == 0.0 )
|
if ( qFuzzyIsNull( v ) )
|
||||||
return 0.0;
|
return 0.0;
|
||||||
|
|
||||||
constexpr double base = 10.0;
|
constexpr double base = 10.0;
|
||||||
|
@ -89,14 +81,19 @@ namespace
|
||||||
|
|
||||||
const double fraction = std::pow( base, lx - p );
|
const double fraction = std::pow( base, lx - p );
|
||||||
|
|
||||||
uint n = base;
|
double stepSize = std::pow( base, p );
|
||||||
while ( ( n > 1 ) && ( fraction <= n / 2 ) )
|
|
||||||
n /= 2;
|
|
||||||
|
|
||||||
double stepSize = n * std::pow( base, p );
|
|
||||||
if ( v < 0 )
|
if ( v < 0 )
|
||||||
stepSize = -stepSize;
|
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;
|
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"
|
#include "moc_QskScaleEngine.cpp"
|
||||||
|
|
|
@ -40,6 +40,8 @@ class QSK_EXPORT QskScaleEngine
|
||||||
|
|
||||||
void autoScale( int maxNumSteps, qreal& x1, qreal& x2, qreal& stepSize ) const;
|
void autoScale( int maxNumSteps, qreal& x1, qreal& x2, qreal& stepSize ) const;
|
||||||
|
|
||||||
|
qreal alignedStepSize( double intervalSize, int numSteps ) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QskIntervalF align( const QskIntervalF&, qreal stepSize ) const;
|
QskIntervalF align( const QskIntervalF&, qreal stepSize ) const;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue