Skip to content

Commit

Permalink
Added limits to t.
Browse files Browse the repository at this point in the history
  • Loading branch information
olbender committed Dec 7, 2018
1 parent 2dd826d commit bdc2d3b
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 2 deletions.
18 changes: 18 additions & 0 deletions splinetoolbox.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,12 @@ namespace splinetoolbox {
*/
inline double catmullrom(double p0, double p1, double p2, double p3, double t) noexcept
{
if (t > 1.0) {
t = 1.0;
}
if (t < 0.0) {
t = 0.0;
}
return p1 + 0.5 * (p2 - p0) * t + 0.5 * (4 * p2 + 2 * p0 - p3 - 5 * p1) * t * t + 0.5 * (3 * p1 + p3 - p0 - 3 * p2) * t * t * t;
}

Expand All @@ -44,6 +50,12 @@ inline double catmullrom(double p0, double p1, double p2, double p3, double t) n
*/
inline double catmullrom_d(double p0, double p1, double p2, double p3, double t) noexcept
{
if (t > 1.0) {
t = 1.0;
}
if (t < 0.0) {
t = 0.0;
}
return 0.5 * (p2 - p0) + (4 * p2 + 2 * p0 - p3 - 5 * p1) * t + 1.5 * (3 * p1 + p3 - p0 - 3 * p2) * t * t;
}

Expand All @@ -52,6 +64,12 @@ inline double catmullrom_d(double p0, double p1, double p2, double p3, double t)
*/
inline double catmullrom_dd(double p0, double p1, double p2, double p3, double t) noexcept
{
if (t > 1.0) {
t = 1.0;
}
if (t < 0.0) {
t = 0.0;
}
return (4 * p2 + 2 * p0 - p3 - 5 * p1) + 3 * (3 * p1 + p3 - p0 - 3 * p2) * t;
}

Expand Down
20 changes: 18 additions & 2 deletions test/test-splinetoolbox.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,22 @@

#include "splinetoolbox.hpp"

TEST_CASE("Some test") {
REQUIRE(true);
TEST_CASE("Catmull-Rom tests") {
REQUIRE(splinetoolbox::catmullrom(1, 2, 3, 4, -0.0) == Approx(2.0));
REQUIRE(splinetoolbox::catmullrom(1, 2, 3, 4, 0.0) == Approx(2.0));
REQUIRE(splinetoolbox::catmullrom(1, 2, 3, 4, 0.6) == Approx(2.6));
REQUIRE(splinetoolbox::catmullrom(1, 2, 3, 4, 1.0) == Approx(3.0));
REQUIRE(splinetoolbox::catmullrom(1, 2, 3, 4, 1.1) == Approx(3.0));

/*
REQUIRE(splinetoolbox::catmullrom_d(1, 2, 3, 4, -0.1)
== Approx(splinetoolbox::catmullrom_d(1, 2, 3, 4, 0.0)));
REQUIRE(splinetoolbox::catmullrom_d(1, 2, 3, 4, 1.0)
== Approx(splinetoolbox::catmullrom_d(1, 2, 3, 4, 1.1)));
REQUIRE(splinetoolbox::catmullrom_dd(1, 2, 3, 4, -0.1)
== Approx(splinetoolbox::catmullrom_d(1, 2, 3, 4, 0.0)));
REQUIRE(splinetoolbox::catmullrom_dd(1, 2, 3, 4, 1.0)
== Approx(splinetoolbox::catmullrom_d(1, 2, 3, 4, 1.1)));
*/
}

0 comments on commit bdc2d3b

Please sign in to comment.