Browse Source

Math: added Range::scaledFromCenter().

pull/286/merge
Vladimír Vondruš 8 years ago
parent
commit
2fd8bae26d
  1. 4
      doc/changelog.dox
  2. 13
      src/Magnum/Math/Range.h
  3. 12
      src/Magnum/Math/Test/RangeTest.cpp

4
doc/changelog.dox

@ -97,13 +97,15 @@ See also:
shortest-path
- Added @ref Math::Range2D::x(), @ref Math::Range3D::x(),
@ref Math::Range2D::y(), @ref Math::Range3D::y(), @ref Math::Range3D::z()
and @ref Math::Range3D::y() for slicing ranges into lower dimensions
and @ref Math::Range3D::xy() for slicing ranges into lower dimensions
- Added @ref Math::intersect() and @ref Math::intersects() as a counterpart
to @ref Math::join() for operating with @ref Math::Range instances
- Added @ref Math::Range::contains() overloading taking a range, in addition
to vector
- Added @ref Math::Range::fromCenter() and documented a hint how to create
integral centered ranges
- Added @ref Math::Range::scaledFromCenter() as a counterpart to
@ref Math::Range::scaled()
- @ref Math::Range is now constructible from a @ref std::pair of values,
making it usable in combination with @ref Math::minmax(), for example
- Added @ref Math::Constants::piQuarter(), @ref Math::Constants::sqrtHalf()

13
src/Magnum/Math/Range.h

@ -223,12 +223,25 @@ template<UnsignedInt dimensions, class T> class Range {
* @brief Scaled range
*
* Multiplies the minimal and maximal coordinates by given amount.
* Center *doesn't* remain the same, use @ref scaledFromCenter() for
* that operation.
* @see @ref padded()
*/
Range<dimensions, T> scaled(const VectorType& scaling) const {
return {_min*scaling, _max*scaling};
}
/**
* @brief Range scaled from the center
*
* Scales the size, while center remains the same.
* @see @ref scaled(), @ref padded(), @ref fromCenter()
*/
Range<dimensions, T> scaledFromCenter(const VectorType& scaling) const {
/* Can't use *T(0.5) because that won't work for integers */
return fromCenter(center(), size()*scaling/T(2));
}
/**
* @brief Whether given point is contained inside the range
*

12
src/Magnum/Math/Test/RangeTest.cpp

@ -116,6 +116,7 @@ struct RangeTest: Corrade::TestSuite::Tester {
void translated();
void padded();
void scaled();
void scaledFromCenter();
void containsVector();
void containsRange();
@ -158,6 +159,7 @@ RangeTest::RangeTest() {
&RangeTest::translated,
&RangeTest::padded,
&RangeTest::scaled,
&RangeTest::scaledFromCenter,
&RangeTest::containsVector,
&RangeTest::containsRange,
@ -531,6 +533,16 @@ void RangeTest::scaled() {
Range2Di b({68, -69}, {94, -90});
CORRADE_COMPARE(a.scaled({2, -3}), b);
CORRADE_COMPARE((a.size()*Vector2i{2, -3}), b.size());
}
void RangeTest::scaledFromCenter() {
Range2Di a{{34, 22}, {48, 30}};
Range2Di b{{27, 38}, {55, 14}};
CORRADE_COMPARE(a.scaledFromCenter({2, -3}), b);
CORRADE_COMPARE(a.center(), b.center());
CORRADE_COMPARE((a.size()*Vector2i{2, -3}), b.size());
}
void RangeTest::containsVector() {

Loading…
Cancel
Save