Document and refactor geom code.
- Doxygenate headers. - Rename to bring methods and functions in line with everything else.
This commit is contained in:
@@ -90,6 +90,18 @@ geomConversionIdentities()
|
||||
SCTEST_CHECK(point == points.at(i));
|
||||
}
|
||||
|
||||
Point2D point(3, 5);
|
||||
Point2D point2;
|
||||
Polar2D polar;
|
||||
Polar2D polar2;
|
||||
|
||||
point.ToPolar(polar);
|
||||
polar.ToPoint(point2);
|
||||
|
||||
SCTEST_CHECK_EQ(point, point2);
|
||||
point2.ToPolar(polar2);
|
||||
SCTEST_CHECK_EQ(polar, polar2);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -20,8 +20,8 @@ using namespace scmp;
|
||||
bool
|
||||
SimpleAngularOrientationFloat()
|
||||
{
|
||||
filter::Madgwickf mflt;
|
||||
const geom::Vector3f gyro{0.174533, 0.0, 0.0}; // 10° X rotation.
|
||||
filter::Madgwickf mflt;
|
||||
const geom::Vector3F gyro{0.174533, 0.0, 0.0}; // 10° X rotation.
|
||||
const geom::Quaternionf frame20Deg{0.984808, 0.173648, 0, 0}; // 20° final Orientation.
|
||||
const float delta = 0.00917; // assume 109 updates per second, as per the paper.
|
||||
const float twentyDegrees = scmp::DegreesToRadiansF(20.0);
|
||||
@@ -47,8 +47,8 @@ SimpleAngularOrientationFloat()
|
||||
bool
|
||||
SimpleAngularOrientationFloatDefaultDT()
|
||||
{
|
||||
filter::Madgwickf mflt;
|
||||
const geom::Vector3f gyro{0.174533, 0.0, 0.0}; // 10° X rotation.
|
||||
filter::Madgwickf mflt;
|
||||
const geom::Vector3F gyro{0.174533, 0.0, 0.0}; // 10° X rotation.
|
||||
const geom::Quaternionf frame20Deg{0.984808, 0.173648, 0, 0}; // 20° final Orientation.
|
||||
const float delta = 0.00917; // assume 109 updates per second, as per the paper.
|
||||
const float twentyDegrees = scmp::DegreesToRadiansF(20.0);
|
||||
@@ -75,8 +75,8 @@ SimpleAngularOrientationFloatDefaultDT()
|
||||
bool
|
||||
VerifyUpdateWithZeroDeltaTFails()
|
||||
{
|
||||
filter::Madgwickf mflt;
|
||||
const geom::Vector3f gyro{0.174533, 0.0, 0.0}; // 10° X rotation.
|
||||
filter::Madgwickf mflt;
|
||||
const geom::Vector3F gyro{0.174533, 0.0, 0.0}; // 10° X rotation.
|
||||
const geom::Quaternionf frame20Deg{0.984808, 0.173648, 0, 0}; // 20° final Orientation.
|
||||
const float twentyDegrees = scmp::DegreesToRadiansF(20.0);
|
||||
|
||||
@@ -100,8 +100,8 @@ VerifyUpdateWithZeroDeltaTFails()
|
||||
bool
|
||||
SimpleAngularOrientationDouble()
|
||||
{
|
||||
filter::Madgwickd mflt;
|
||||
const geom::Vector3d gyro{0.174533, 0.0, 0.0}; // 10° X rotation.
|
||||
filter::Madgwickd mflt;
|
||||
const geom::Vector3D gyro{0.174533, 0.0, 0.0}; // 10° X rotation.
|
||||
const geom::Quaterniond frame20Deg{0.984808, 0.173648, 0, 0}; // 20° final Orientation.
|
||||
const double delta = 0.00917; // assume 109 updates per second, as per the paper.
|
||||
const double twentyDegrees = scmp::DegreesToRadiansD(20.0);
|
||||
@@ -126,9 +126,9 @@ SimpleAngularOrientationDouble()
|
||||
bool
|
||||
SimpleAngularOrientation2InitialVector3f()
|
||||
{
|
||||
const geom::Vector3f initialFrame{0, 0, 0};
|
||||
const geom::Vector3F initialFrame{0, 0, 0};
|
||||
filter::Madgwickf mflt(initialFrame);
|
||||
const geom::Vector3f gyro{0.174533, 0.0, 0.0}; // 10° X rotation.
|
||||
const geom::Vector3F gyro{0.174533, 0.0, 0.0}; // 10° X rotation.
|
||||
const geom::Quaternionf frame20Deg{0.984808, 0.173648, 0, 0}; // 20° final Orientation.
|
||||
const float delta = 0.00917; // assume 109 updates per second, as per the paper.
|
||||
const float twentyDegrees = scmp::DegreesToRadiansF(20.0);
|
||||
@@ -153,9 +153,9 @@ SimpleAngularOrientation2InitialVector3f()
|
||||
bool
|
||||
SimpleAngularOrientation2InitialQuaternionf()
|
||||
{
|
||||
const auto initialFrame = geom::quaternionf_from_euler({0, 0, 0});
|
||||
const auto initialFrame = geom::QuaternionFromEuler({0, 0, 0});
|
||||
filter::Madgwickf mflt(initialFrame);
|
||||
const geom::Vector3f gyro{0.174533, 0.0, 0.0}; // 10° X rotation.
|
||||
const geom::Vector3F gyro{0.174533, 0.0, 0.0}; // 10° X rotation.
|
||||
const geom::Quaternionf frame20Deg{0.984808, 0.173648, 0, 0}; // 20° final Orientation.
|
||||
const float delta = 0.00917; // assume 109 updates per second, as per the paper.
|
||||
const float twentyDegrees = scmp::DegreesToRadiansF(20.0);
|
||||
@@ -180,9 +180,9 @@ SimpleAngularOrientation2InitialQuaternionf()
|
||||
bool
|
||||
SimpleAngularOrientation2InitialVector3d()
|
||||
{
|
||||
const geom::Vector3d initialFrame{0, 0, 0};
|
||||
const geom::Vector3D initialFrame{0, 0, 0};
|
||||
filter::Madgwickd mflt(initialFrame);
|
||||
const geom::Vector3d gyro{0.174533, 0.0, 0.0}; // 10° X rotation.
|
||||
const geom::Vector3D gyro{0.174533, 0.0, 0.0}; // 10° X rotation.
|
||||
const geom::Quaterniond frame20Deg{0.984808, 0.173648, 0, 0}; // 20° final Orientation.
|
||||
const double delta = 0.00917; // assume 109 updates per second, as per the paper.
|
||||
const double twentyDegrees = scmp::DegreesToRadiansD(20.0);
|
||||
@@ -207,9 +207,9 @@ SimpleAngularOrientation2InitialVector3d()
|
||||
bool
|
||||
SimpleAngularOrientation2InitialQuaterniond()
|
||||
{
|
||||
const auto initialFrame = geom::quaterniond_from_euler({0, 0, 0});
|
||||
filter::Madgwickd mflt(initialFrame);
|
||||
const geom::Vector3d gyro{0.174533, 0.0, 0.0}; // 10° X rotation.
|
||||
const auto initialFrame = geom::QuaternionFromEuler({0, 0, 0});
|
||||
filter::Madgwickd mflt(initialFrame);
|
||||
const geom::Vector3D gyro{0.174533, 0.0, 0.0}; // 10° X rotation.
|
||||
const geom::Quaterniond frame20Deg{0.984808, 0.173648, 0, 0}; // 20° final Orientation.
|
||||
const double delta = 0.00917; // assume 109 updates per second, as per the paper.
|
||||
const double twentyDegrees = scmp::DegreesToRadiansD(20.0);
|
||||
@@ -266,9 +266,9 @@ main(int argc, char **argv)
|
||||
SimpleAngularOrientation2InitialVector3f);
|
||||
suite.AddTest("SimpleAngularOrientationDouble (inital vector3d)",
|
||||
SimpleAngularOrientation2InitialVector3d);
|
||||
suite.AddTest("SimpleAngularOrientationFloat (inital quaternionf)",
|
||||
suite.AddTest("SimpleAngularOrientationFloat (inital MakeQuaternion)",
|
||||
SimpleAngularOrientation2InitialQuaternionf);
|
||||
suite.AddTest("SimpleAngularOrientationDouble (inital quaterniond)",
|
||||
suite.AddTest("SimpleAngularOrientationDouble (inital MakeQuaternion)",
|
||||
SimpleAngularOrientation2InitialQuaterniond);
|
||||
|
||||
delete flags;
|
||||
|
||||
@@ -45,9 +45,9 @@ UnitConversions_RadiansToDegreesD()
|
||||
bool
|
||||
Orientation2f_Heading()
|
||||
{
|
||||
geom::Vector2f a{2.0, 2.0};
|
||||
geom::Vector2F a{2.0, 2.0};
|
||||
|
||||
SCTEST_CHECK_FEQ(geom::Heading2f(a), scmp::DegreesToRadiansF(45));
|
||||
SCTEST_CHECK_FEQ(geom::Heading2F(a), scmp::DegreesToRadiansF(45));
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -56,7 +56,7 @@ Orientation2f_Heading()
|
||||
bool
|
||||
Orientation3f_Heading()
|
||||
{
|
||||
geom::Vector3f a{2.0, 2.0, 2.0};
|
||||
geom::Vector3F a{2.0, 2.0, 2.0};
|
||||
|
||||
SCTEST_CHECK_FEQ(geom::Heading3f(a), scmp::DegreesToRadiansF(45));
|
||||
|
||||
@@ -67,7 +67,7 @@ Orientation3f_Heading()
|
||||
bool
|
||||
Orientation2d_Heading()
|
||||
{
|
||||
geom::Vector2d a{2.0, 2.0};
|
||||
geom::Vector2D a{2.0, 2.0};
|
||||
|
||||
return scmp::WithinTolerance(geom::Heading2d(a), scmp::DegreesToRadiansD(45), 0.000001);
|
||||
}
|
||||
@@ -76,7 +76,7 @@ Orientation2d_Heading()
|
||||
bool
|
||||
Orientation3d_Heading()
|
||||
{
|
||||
geom::Vector3d a{2.0, 2.0, 2.0};
|
||||
geom::Vector3D a{2.0, 2.0, 2.0};
|
||||
|
||||
return scmp::WithinTolerance(geom::Heading3d(a), scmp::DegreesToRadiansD(45), 0.000001);
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ using namespace sctest;
|
||||
static bool
|
||||
Quaternion_SelfTest()
|
||||
{
|
||||
geom::Quaternion_SelfTest();
|
||||
geom::QuaternionSelfTest();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -23,9 +23,9 @@ Quaternion_SelfTest()
|
||||
static bool
|
||||
Quaterniond_Addition()
|
||||
{
|
||||
geom::Quaterniond p(geom::Vector4d {3.0, 1.0, -2.0, 1.0});
|
||||
geom::Quaterniond q(geom::Vector4d {2.0, -1.0, 2.0, 3.0});
|
||||
geom::Quaterniond expected(geom::Vector4d{5.0, 0.0, 0.0, 4.0});
|
||||
geom::Quaterniond p(geom::Vector4D {3.0, 1.0, -2.0, 1.0});
|
||||
geom::Quaterniond q(geom::Vector4D {2.0, -1.0, 2.0, 3.0});
|
||||
geom::Quaterniond expected(geom::Vector4D{5.0, 0.0, 0.0, 4.0});
|
||||
|
||||
SCTEST_CHECK_EQ(p + q, expected);
|
||||
SCTEST_CHECK_EQ(expected - q, p);
|
||||
@@ -41,7 +41,7 @@ Quaterniond_Conjugate()
|
||||
geom::Quaterniond p {2.0, 3.0, 4.0, 5.0};
|
||||
geom::Quaterniond q {2.0, -3.0, -4.0, -5.0};
|
||||
|
||||
SCTEST_CHECK_EQ(p.conjugate(), q);
|
||||
SCTEST_CHECK_EQ(p.Conjugate(), q);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -49,8 +49,9 @@ Quaterniond_Conjugate()
|
||||
static bool
|
||||
Quaterniond_Euler()
|
||||
{
|
||||
geom::Quaterniond p = geom::quaterniond(geom::Vector3d{5.037992718099102, 6.212303632611285, 1.7056797335843106}, M_PI/4.0);
|
||||
geom::Quaterniond q = geom::quaterniond_from_euler(p.euler());
|
||||
geom::Quaterniond p = geom::MakeQuaternion(
|
||||
geom::Vector3D{5.037992718099102, 6.212303632611285, 1.7056797335843106}, M_PI / 4.0);
|
||||
geom::Quaterniond q = geom::QuaternionFromEuler(p.Euler());
|
||||
|
||||
SCTEST_CHECK_EQ(p, q);
|
||||
|
||||
@@ -64,7 +65,7 @@ Quaterniond_Identity()
|
||||
geom::Quaterniond p {3.0, 1.0, -2.0, 1.0};
|
||||
geom::Quaterniond q;
|
||||
|
||||
SCTEST_CHECK(q.isIdentity());
|
||||
SCTEST_CHECK(q.IsIdentity());
|
||||
SCTEST_CHECK_EQ(p * q, p);
|
||||
|
||||
return true;
|
||||
@@ -77,7 +78,7 @@ Quaterniond_Inverse()
|
||||
geom::Quaterniond p {2.0, 3.0, 4.0, 5.0};
|
||||
geom::Quaterniond q {0.03704, -0.05556, -0.07407, -0.09259};
|
||||
|
||||
SCTEST_CHECK_EQ(p.inverse(), q);
|
||||
SCTEST_CHECK_EQ(p.Inverse(), q);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -89,7 +90,7 @@ Quaterniond_Norm()
|
||||
geom::Quaterniond p {5.563199889674063, 0.9899139811480784, 9.387110042325054, 6.161341707794767};
|
||||
double norm = 12.57016663729933;
|
||||
|
||||
SCTEST_CHECK_DEQ(p.norm(), norm);
|
||||
SCTEST_CHECK_DEQ(p.Norm(), norm);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -111,27 +112,27 @@ Quaterniond_Product()
|
||||
static bool
|
||||
Quaterniond_Rotate()
|
||||
{
|
||||
// This test aims to rotate a vector v using a quaternion.
|
||||
// This test aims to Rotate a vector v using a MakeQuaternion.
|
||||
// c.f. https://math.stackexchange.com/questions/40164/how-do-you-rotate-a-vector-by-a-unit-quaternion
|
||||
// If we assume a standard IMU frame of reference following the
|
||||
// right hand rule:
|
||||
// + The x axis points toward magnetic north
|
||||
// + The y axis points toward magnentic west
|
||||
// + The z axis points toward the sky
|
||||
// + The x Axis points toward magnetic north
|
||||
// + The y Axis points toward magnentic west
|
||||
// + The z Axis points toward the sky
|
||||
// Given a vector pointing due north, rotating by 90º about
|
||||
// the y-axis should leave us pointing toward the sky.
|
||||
// the y-Axis should leave us pointing toward the sky.
|
||||
|
||||
geom::Vector3d v {1.0, 0.0, 0.0}; // a vector pointed north
|
||||
geom::Vector3d yAxis {0.0, 1.0, 0.0}; // a vector representing the y axis.
|
||||
double angle = M_PI / 2; // 90º rotation
|
||||
geom::Vector3D v {1.0, 0.0, 0.0}; // a vector pointed north
|
||||
geom::Vector3D yAxis {0.0, 1.0, 0.0}; // a vector representing the y Axis.
|
||||
double angle = M_PI / 2; // 90º rotation
|
||||
|
||||
// A quaternion representing a 90º rotation about the y axis.
|
||||
geom::Quaterniond p = geom::quaterniond(yAxis, angle);
|
||||
geom::Vector3d vr {0.0, 0.0, 1.0}; // expected rotated vector.
|
||||
// A MakeQuaternion representing a 90º rotation about the y Axis.
|
||||
geom::Quaterniond p = geom::MakeQuaternion(yAxis, angle);
|
||||
geom::Vector3D vr {0.0, 0.0, 1.0}; // expected rotated vector.
|
||||
|
||||
// A rotation quaternion should be a unit quaternion.
|
||||
SCTEST_CHECK(p.isUnitQuaternion());
|
||||
SCTEST_CHECK_EQ(p.rotate(v), vr);
|
||||
// A rotation quaternion should be a unit MakeQuaternion.
|
||||
SCTEST_CHECK(p.IsUnitQuaternion());
|
||||
SCTEST_CHECK_EQ(p.Rotate(v), vr);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -141,13 +142,13 @@ static bool
|
||||
Quaterniond_ShortestSLERP()
|
||||
{
|
||||
// Our starting point is an Orientation that is yawed 45° - our
|
||||
// Orientation is pointed π/4 radians in the X axis.
|
||||
// Orientation is pointed π/4 radians in the X Axis.
|
||||
geom::Quaterniond p {0.92388, 0.382683, 0, 0};
|
||||
// Our ending point is an Orientation that is yawed -45° - or
|
||||
// pointed -π/4 radians in the X axis.
|
||||
// pointed -π/4 radians in the X Axis.
|
||||
geom::Quaterniond q {0.92388, -0.382683, 0, 0};
|
||||
// The halfway point should be oriented midway about the X axis. It turns
|
||||
// out this is an identity quaternion.
|
||||
// The halfway point should be oriented midway about the X Axis. It turns
|
||||
// out this is an identity MakeQuaternion.
|
||||
geom::Quaterniond r;
|
||||
|
||||
SCTEST_CHECK_EQ(geom::ShortestSLERP(p, q, 0.0), p);
|
||||
@@ -185,7 +186,7 @@ Quaterniond_Unit()
|
||||
{
|
||||
geom::Quaterniond q {0.0, 0.5773502691896258, 0.5773502691896258, 0.5773502691896258};
|
||||
|
||||
SCTEST_CHECK(q.isUnitQuaternion());
|
||||
SCTEST_CHECK(q.IsUnitQuaternion());
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -194,9 +195,9 @@ Quaterniond_Unit()
|
||||
static bool
|
||||
Quaterniond_UtilityCreator()
|
||||
{
|
||||
geom::Vector3d v {1.0, 1.0, 1.0};
|
||||
double w = M_PI;
|
||||
geom::Quaterniond p = geom::quaterniond(v, w);
|
||||
geom::Vector3D v {1.0, 1.0, 1.0};
|
||||
double w = M_PI;
|
||||
geom::Quaterniond p = geom::MakeQuaternion(v, w);
|
||||
geom::Quaterniond q {0.0, 0.5773502691896258, 0.5773502691896258, 0.5773502691896258};
|
||||
|
||||
SCTEST_CHECK_EQ(p, q);
|
||||
@@ -226,7 +227,7 @@ Quaternionf_Conjugate()
|
||||
geom::Quaternionf p {2.0, 3.0, 4.0, 5.0};
|
||||
geom::Quaternionf q {2.0, -3.0, -4.0, -5.0};
|
||||
|
||||
SCTEST_CHECK_EQ(p.conjugate(), q);
|
||||
SCTEST_CHECK_EQ(p.Conjugate(), q);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -235,8 +236,9 @@ Quaternionf_Conjugate()
|
||||
static bool
|
||||
Quaternionf_Euler()
|
||||
{
|
||||
geom::Quaternionf p = geom::quaternionf(geom::Vector3f{5.037992718099102, 6.212303632611285, 1.7056797335843106}, M_PI/4.0);
|
||||
geom::Quaternionf q = geom::quaternionf_from_euler(p.euler());
|
||||
geom::Quaternionf p = geom::MakeQuaternion(
|
||||
geom::Vector3F{5.037992718099102, 6.212303632611285, 1.7056797335843106}, M_PI / 4.0);
|
||||
geom::Quaternionf q = geom::QuaternionFromEuler(p.Euler());
|
||||
|
||||
SCTEST_CHECK_EQ(p, q);
|
||||
|
||||
@@ -262,7 +264,7 @@ Quaternionf_Inverse()
|
||||
geom::Quaternionf p {2.0, 3.0, 4.0, 5.0};
|
||||
geom::Quaternionf q {0.03704, -0.05556, -0.07407, -0.09259};
|
||||
|
||||
SCTEST_CHECK_EQ(p.inverse(), q);
|
||||
SCTEST_CHECK_EQ(p.Inverse(), q);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -274,7 +276,7 @@ Quaternionf_Norm()
|
||||
geom::Quaternionf p {0.9899139811480784, 9.387110042325054, 6.161341707794767, 5.563199889674063};
|
||||
float norm = 12.57016663729933;
|
||||
|
||||
SCTEST_CHECK_FEQ(p.norm(), norm);
|
||||
SCTEST_CHECK_FEQ(p.Norm(), norm);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -296,15 +298,15 @@ Quaternionf_Product()
|
||||
static bool
|
||||
Quaternionf_Rotate()
|
||||
{
|
||||
geom::Vector3f v {1.0, 0.0, 0.0};
|
||||
geom::Vector3f yAxis {0.0, 1.0, 0.0};
|
||||
float angle = M_PI / 2;
|
||||
geom::Vector3F v {1.0, 0.0, 0.0};
|
||||
geom::Vector3F yAxis {0.0, 1.0, 0.0};
|
||||
float angle = M_PI / 2;
|
||||
|
||||
geom::Quaternionf p = geom::quaternionf(yAxis, angle);
|
||||
geom::Vector3f vr {0.0, 0.0, 1.0};
|
||||
geom::Quaternionf p = geom::MakeQuaternion(yAxis, angle);
|
||||
geom::Vector3F vr {0.0, 0.0, 1.0};
|
||||
|
||||
SCTEST_CHECK(p.isUnitQuaternion());
|
||||
SCTEST_CHECK_EQ(p.rotate(v), vr);
|
||||
SCTEST_CHECK(p.IsUnitQuaternion());
|
||||
SCTEST_CHECK_EQ(p.Rotate(v), vr);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -314,13 +316,13 @@ static bool
|
||||
Quaternionf_ShortestSLERP()
|
||||
{
|
||||
// Our starting point is an Orientation that is yawed 45° - our
|
||||
// Orientation is pointed π/4 radians in the X axis.
|
||||
// Orientation is pointed π/4 radians in the X Axis.
|
||||
geom::Quaternionf p {0.92388, 0.382683, 0, 0};
|
||||
// Our ending point is an Orientation that is yawed -45° - or
|
||||
// pointed -π/4 radians in the X axis.
|
||||
// pointed -π/4 radians in the X Axis.
|
||||
geom::Quaternionf q {0.92388, -0.382683, 0, 0};
|
||||
// The halfway point should be oriented midway about the X axis. It turns
|
||||
// out this is an identity quaternion.
|
||||
// The halfway point should be oriented midway about the X Axis. It turns
|
||||
// out this is an identity MakeQuaternion.
|
||||
geom::Quaternionf r;
|
||||
|
||||
SCTEST_CHECK_EQ(geom::ShortestSLERP(p, q, (float)0.0), p);
|
||||
@@ -358,7 +360,7 @@ Quaternionf_Unit()
|
||||
{
|
||||
geom::Quaternionf q {0.0, 0.5773502691896258, 0.5773502691896258, 0.5773502691896258};
|
||||
|
||||
SCTEST_CHECK(q.isUnitQuaternion());
|
||||
SCTEST_CHECK(q.IsUnitQuaternion());
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -367,9 +369,9 @@ Quaternionf_Unit()
|
||||
static bool
|
||||
Quaternionf_UtilityCreator()
|
||||
{
|
||||
geom::Vector3f v {1.0, 1.0, 1.0};
|
||||
float w = M_PI;
|
||||
geom::Quaternionf p = geom::quaternionf(v, w);
|
||||
geom::Vector3F v {1.0, 1.0, 1.0};
|
||||
float w = M_PI;
|
||||
geom::Quaternionf p = geom::MakeQuaternion(v, w);
|
||||
geom::Quaternionf q {0.0, 0.5773502691896258, 0.5773502691896258, 0.5773502691896258};
|
||||
|
||||
SCTEST_CHECK_EQ(p, q);
|
||||
@@ -381,15 +383,15 @@ Quaternionf_UtilityCreator()
|
||||
static bool
|
||||
QuaternionMiscellaneous_SanityChecks()
|
||||
{
|
||||
geom::Vector4d q {4.0, 1.0, 2.0, 3.0};
|
||||
geom::Vector3d v {1.0, 2.0, 3.0};
|
||||
double w = 4.0;
|
||||
geom::Vector4D q {4.0, 1.0, 2.0, 3.0};
|
||||
geom::Vector3D v {1.0, 2.0, 3.0};
|
||||
double w = 4.0;
|
||||
geom::Quaterniond p(q);
|
||||
geom::Quaterniond u = p.unitQuaternion();
|
||||
geom::Quaterniond u = p.UnitQuaternion();
|
||||
|
||||
SCTEST_CHECK_EQ(p.axis(), v);
|
||||
SCTEST_CHECK_DEQ(p.angle(), w);
|
||||
SCTEST_CHECK(u.isUnitQuaternion());
|
||||
SCTEST_CHECK_EQ(p.Axis(), v);
|
||||
SCTEST_CHECK_DEQ(p.Angle(), w);
|
||||
SCTEST_CHECK(u.IsUnitQuaternion());
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -417,10 +419,10 @@ static bool
|
||||
QuaternionMiscellanous_InitializerConstructor()
|
||||
{
|
||||
geom::Quaternionf p {1.0, 1.0, 1.0, 1.0};
|
||||
geom::Quaternionf q(geom::Vector4f {1.0, 1.0, 1.0, 1.0});
|
||||
geom::Quaternionf q(geom::Vector4F {1.0, 1.0, 1.0, 1.0});
|
||||
|
||||
SCTEST_CHECK_EQ(p, q);
|
||||
SCTEST_CHECK_FEQ(p.norm(), (float)2.0);
|
||||
SCTEST_CHECK_FEQ(p.Norm(), (float)2.0);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -449,7 +451,7 @@ main(int argc, char *argv[])
|
||||
suite.Silence();
|
||||
}
|
||||
|
||||
suite.AddTest("Quaternion_SelfTest", Quaternion_SelfTest);
|
||||
suite.AddTest("QuaternionSelfTest", Quaternion_SelfTest);
|
||||
suite.AddTest("QuaternionMiscellanous_InitializerConstructor",
|
||||
QuaternionMiscellanous_InitializerConstructor);
|
||||
suite.AddTest("QuaternionMiscellaneous_SanityChecks",
|
||||
|
||||
@@ -40,7 +40,7 @@ tlvTestSuite(Arena &backend)
|
||||
sctest::Assert(cursor != nullptr);
|
||||
cursor = nullptr;
|
||||
|
||||
// the cursor should point at the next record,
|
||||
// the cursor should point At the next record,
|
||||
// and rec4 should contain the same data as rec1.
|
||||
std::cout << "\tFindTag 1" << "\n";
|
||||
cursor = TLV::FindTag(backend, cursor, rec4);
|
||||
|
||||
248
test/vector.cc
248
test/vector.cc
@@ -11,7 +11,7 @@
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
// You may obtain a copy of the License At
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
@@ -37,8 +37,8 @@ using namespace std;
|
||||
static bool
|
||||
Vector3Miscellaneous_ExtractionOperator3d()
|
||||
{
|
||||
geom::Vector3d vec {1.0, 2.0, 3.0};
|
||||
stringstream vecBuffer;
|
||||
geom::Vector3D vec {1.0, 2.0, 3.0};
|
||||
stringstream vecBuffer;
|
||||
|
||||
vecBuffer << vec;
|
||||
SCTEST_CHECK_EQ(vecBuffer.str(), "<1, 2, 3>");
|
||||
@@ -49,8 +49,8 @@ Vector3Miscellaneous_ExtractionOperator3d()
|
||||
static bool
|
||||
Vector3Miscellaneous_ExtractionOperator3f()
|
||||
{
|
||||
geom::Vector3f vec {1.0, 2.0, 3.0};
|
||||
stringstream vecBuffer;
|
||||
geom::Vector3F vec {1.0, 2.0, 3.0};
|
||||
stringstream vecBuffer;
|
||||
|
||||
vecBuffer << vec;
|
||||
SCTEST_CHECK_EQ(vecBuffer.str(), "<1, 2, 3>");
|
||||
@@ -60,10 +60,10 @@ Vector3Miscellaneous_ExtractionOperator3f()
|
||||
|
||||
static bool
|
||||
Vector3Miscellaneous_SetEpsilon() {
|
||||
geom::Vector3f a {1.0, 1.0, 1.0};
|
||||
geom::Vector3f b;
|
||||
geom::Vector3F a {1.0, 1.0, 1.0};
|
||||
geom::Vector3F b;
|
||||
|
||||
a.setEpsilon(1.1);
|
||||
a.SetEpsilon(1.1);
|
||||
SCTEST_CHECK_EQ(a, b);
|
||||
return true;
|
||||
}
|
||||
@@ -72,10 +72,10 @@ Vector3Miscellaneous_SetEpsilon() {
|
||||
static bool
|
||||
Vector3FloatTests_Magnitude()
|
||||
{
|
||||
geom::Vector3f v3f {1.0, -2.0, 3.0};
|
||||
const float expected = 3.74165738677394;
|
||||
geom::Vector3F v3f {1.0, -2.0, 3.0};
|
||||
const float expected = 3.74165738677394;
|
||||
|
||||
SCTEST_CHECK_FEQ(v3f.magnitude(), expected);
|
||||
SCTEST_CHECK_FEQ(v3f.Magnitude(), expected);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -84,9 +84,9 @@ Vector3FloatTests_Magnitude()
|
||||
static bool
|
||||
Vector3FloatTests_Equality()
|
||||
{
|
||||
geom::Vector3f a {1.0, 2.0, 3.0};
|
||||
geom::Vector3f b {1.0, 2.0, 3.0};
|
||||
geom::Vector3f c {1.0, 2.0, 1.0};
|
||||
geom::Vector3F a {1.0, 2.0, 3.0};
|
||||
geom::Vector3F b {1.0, 2.0, 3.0};
|
||||
geom::Vector3F c {1.0, 2.0, 1.0};
|
||||
|
||||
SCTEST_CHECK_EQ(a, b);
|
||||
SCTEST_CHECK_EQ(b, a);
|
||||
@@ -100,9 +100,9 @@ Vector3FloatTests_Equality()
|
||||
static bool
|
||||
Vector3FloatTests_Addition()
|
||||
{
|
||||
geom::Vector3f a {1.0, 2.0, 3.0};
|
||||
geom::Vector3f b {4.0, 5.0, 6.0};
|
||||
geom::Vector3f expected {5.0, 7.0, 9.0};
|
||||
geom::Vector3F a {1.0, 2.0, 3.0};
|
||||
geom::Vector3F b {4.0, 5.0, 6.0};
|
||||
geom::Vector3F expected {5.0, 7.0, 9.0};
|
||||
|
||||
SCTEST_CHECK_EQ(a+b, expected);
|
||||
|
||||
@@ -113,9 +113,9 @@ Vector3FloatTests_Addition()
|
||||
static bool
|
||||
Vector3FloatTests_Subtraction()
|
||||
{
|
||||
geom::Vector3f a {1.0, 2.0, 3.0};
|
||||
geom::Vector3f b {4.0, 5.0, 6.0};
|
||||
geom::Vector3f c {5.0, 7.0, 9.0};
|
||||
geom::Vector3F a {1.0, 2.0, 3.0};
|
||||
geom::Vector3F b {4.0, 5.0, 6.0};
|
||||
geom::Vector3F c {5.0, 7.0, 9.0};
|
||||
|
||||
SCTEST_CHECK_EQ(c-b, a);
|
||||
|
||||
@@ -126,8 +126,8 @@ Vector3FloatTests_Subtraction()
|
||||
static bool
|
||||
Vector3FloatTests_ScalarMultiplication()
|
||||
{
|
||||
geom::Vector3f a {1.0, 2.0, 3.0};
|
||||
geom::Vector3f expected {3.0, 6.0, 9.0};
|
||||
geom::Vector3F a {1.0, 2.0, 3.0};
|
||||
geom::Vector3F expected {3.0, 6.0, 9.0};
|
||||
|
||||
SCTEST_CHECK_EQ(a * 3.0, expected);
|
||||
|
||||
@@ -138,8 +138,8 @@ Vector3FloatTests_ScalarMultiplication()
|
||||
static bool
|
||||
Vector3FloatTests_ScalarDivision()
|
||||
{
|
||||
geom::Vector3f a {1.0, 2.0, 3.0};
|
||||
geom::Vector3f b {3.0, 6.0, 9.0};
|
||||
geom::Vector3F a {1.0, 2.0, 3.0};
|
||||
geom::Vector3F b {3.0, 6.0, 9.0};
|
||||
|
||||
SCTEST_CHECK_EQ(b / 3.0, a);
|
||||
|
||||
@@ -150,8 +150,8 @@ Vector3FloatTests_ScalarDivision()
|
||||
static bool
|
||||
Vector3FloatTests_DotProduct()
|
||||
{
|
||||
geom::Vector3f a {1.0, 2.0, 3.0};
|
||||
geom::Vector3f b {4.0, 5.0, 6.0};
|
||||
geom::Vector3F a {1.0, 2.0, 3.0};
|
||||
geom::Vector3F b {4.0, 5.0, 6.0};
|
||||
|
||||
SCTEST_CHECK_FEQ(a * b, (float)32.0);
|
||||
|
||||
@@ -162,14 +162,14 @@ static bool
|
||||
Vector3FloatTests_UnitVector()
|
||||
{
|
||||
// Test values randomly generated and calculated with numpy.
|
||||
geom::Vector3f vec3 {5.320264018493507, 5.6541812891273935, 1.9233435162644652};
|
||||
geom::Vector3f unit {0.6651669556972103, 0.7069150218815566, 0.24046636539587804};
|
||||
geom::Vector3f unit2;
|
||||
geom::Vector3F vec3 {5.320264018493507, 5.6541812891273935, 1.9233435162644652};
|
||||
geom::Vector3F unit {0.6651669556972103, 0.7069150218815566, 0.24046636539587804};
|
||||
geom::Vector3F unit2;
|
||||
|
||||
SCTEST_CHECK_EQ(vec3.unitVector(), unit);
|
||||
SCTEST_CHECK_FALSE(vec3.isUnitVector());
|
||||
SCTEST_CHECK(unit.isUnitVector());
|
||||
SCTEST_CHECK(unit2.isUnitVector());
|
||||
SCTEST_CHECK_EQ(vec3.UnitVector(), unit);
|
||||
SCTEST_CHECK_FALSE(vec3.IsUnitVector());
|
||||
SCTEST_CHECK(unit.IsUnitVector());
|
||||
SCTEST_CHECK(unit2.IsUnitVector());
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -177,13 +177,13 @@ Vector3FloatTests_UnitVector()
|
||||
static bool
|
||||
Vector3FloatTests_Angle()
|
||||
{
|
||||
geom::Vector3f a {0.3977933061361172, 8.053980094436525, 8.1287759943773};
|
||||
geom::Vector3f b {9.817895298608196, 4.034166890407462, 4.37628316513266};
|
||||
geom::Vector3f c {7.35, 0.221, 5.188};
|
||||
geom::Vector3f d {2.751, 8.259, 3.985};
|
||||
geom::Vector3F a {0.3977933061361172, 8.053980094436525, 8.1287759943773};
|
||||
geom::Vector3F b {9.817895298608196, 4.034166890407462, 4.37628316513266};
|
||||
geom::Vector3F c {7.35, 0.221, 5.188};
|
||||
geom::Vector3F d {2.751, 8.259, 3.985};
|
||||
|
||||
SCTEST_CHECK_FEQ(a.angle(b), (float)0.9914540426033251);
|
||||
if (!scmp::WithinTolerance(c.angle(d), (float)1.052, (float)0.001)) {
|
||||
SCTEST_CHECK_FEQ(a.Angle(b), (float)0.9914540426033251);
|
||||
if (!scmp::WithinTolerance(c.Angle(d), (float)1.052, (float)0.001)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -194,26 +194,26 @@ Vector3FloatTests_Angle()
|
||||
static bool
|
||||
Vector3FloatTests_ParallelOrthogonalVectors()
|
||||
{
|
||||
geom::Vector3f a {-2.029, 9.97, 4.172};
|
||||
geom::Vector3f b {-9.231, -6.639, -7.245};
|
||||
geom::Vector3f c {-2.328, -7.284, -1.214};
|
||||
geom::Vector3f d {-1.821, 1.072, -2.94};
|
||||
geom::Vector3f e {-2.0, 1.0, 3.0};
|
||||
geom::Vector3f f {-6.0, 3.0, 9.0};
|
||||
geom::Vector3f zeroVector {0.0, 0.0, 0.0};
|
||||
geom::Vector3F a {-2.029, 9.97, 4.172};
|
||||
geom::Vector3F b {-9.231, -6.639, -7.245};
|
||||
geom::Vector3F c {-2.328, -7.284, -1.214};
|
||||
geom::Vector3F d {-1.821, 1.072, -2.94};
|
||||
geom::Vector3F e {-2.0, 1.0, 3.0};
|
||||
geom::Vector3F f {-6.0, 3.0, 9.0};
|
||||
geom::Vector3F zeroVector {0.0, 0.0, 0.0};
|
||||
|
||||
SCTEST_CHECK_FALSE(a.isParallel(b));
|
||||
SCTEST_CHECK_FALSE(a.isOrthogonal(b));
|
||||
SCTEST_CHECK_FALSE(a.IsParallel(b));
|
||||
SCTEST_CHECK_FALSE(a.IsOrthogonal(b));
|
||||
|
||||
SCTEST_CHECK_FALSE(c.isParallel(d));
|
||||
SCTEST_CHECK(c.isOrthogonal(d));
|
||||
SCTEST_CHECK_FALSE(c.IsParallel(d));
|
||||
SCTEST_CHECK(c.IsOrthogonal(d));
|
||||
|
||||
SCTEST_CHECK(e.isParallel(f));
|
||||
SCTEST_CHECK_FALSE(e.isOrthogonal(f));
|
||||
SCTEST_CHECK(e.IsParallel(f));
|
||||
SCTEST_CHECK_FALSE(e.IsOrthogonal(f));
|
||||
|
||||
SCTEST_CHECK(zeroVector.isZero());
|
||||
SCTEST_CHECK(c.isParallel(zeroVector));
|
||||
SCTEST_CHECK(c.isOrthogonal(zeroVector));
|
||||
SCTEST_CHECK(zeroVector.IsZero());
|
||||
SCTEST_CHECK(c.IsParallel(zeroVector));
|
||||
SCTEST_CHECK(c.IsOrthogonal(zeroVector));
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -222,13 +222,13 @@ Vector3FloatTests_ParallelOrthogonalVectors()
|
||||
static bool
|
||||
Vector3FloatTests_Projections()
|
||||
{
|
||||
geom::Vector3f a {4.866769214609107, 6.2356222686140566, 9.140878417029711};
|
||||
geom::Vector3f b {6.135533104801077, 8.757851406697895, 0.6738031370548048};
|
||||
geom::Vector3f c {4.843812341655318, 6.9140509888133055, 0.5319465962229454};
|
||||
geom::Vector3f d {0.02295687295378901, -0.6784287201992489, 8.608931820806765};
|
||||
geom::Vector3F a {4.866769214609107, 6.2356222686140566, 9.140878417029711};
|
||||
geom::Vector3F b {6.135533104801077, 8.757851406697895, 0.6738031370548048};
|
||||
geom::Vector3F c {4.843812341655318, 6.9140509888133055, 0.5319465962229454};
|
||||
geom::Vector3F d {0.02295687295378901, -0.6784287201992489, 8.608931820806765};
|
||||
|
||||
SCTEST_CHECK_EQ(a.projectParallel(b), c);
|
||||
SCTEST_CHECK_EQ(a.projectOrthogonal(b), d);
|
||||
SCTEST_CHECK_EQ(a.ProjectParallel(b), c);
|
||||
SCTEST_CHECK_EQ(a.ProjectOrthogonal(b), d);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -237,12 +237,12 @@ Vector3FloatTests_Projections()
|
||||
static bool
|
||||
Vector3FloatTests_CrossProduct()
|
||||
{
|
||||
geom::Vector3f a {8.462, 7.893, -8.187};
|
||||
geom::Vector3f b {6.984, -5.975, 4.778};
|
||||
geom::Vector3f c {-11.2046, -97.6094, -105.685};
|
||||
geom::Vector3F a {8.462, 7.893, -8.187};
|
||||
geom::Vector3F b {6.984, -5.975, 4.778};
|
||||
geom::Vector3F c {-11.2046, -97.6094, -105.685};
|
||||
|
||||
c.setEpsilon(0.001);
|
||||
SCTEST_CHECK_EQ(c, a.cross(b));
|
||||
c.SetEpsilon(0.001);
|
||||
SCTEST_CHECK_EQ(c, a.Cross(b));
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -251,10 +251,10 @@ Vector3FloatTests_CrossProduct()
|
||||
static bool
|
||||
Vector3DoubleTests_Magnitude()
|
||||
{
|
||||
geom::Vector3d v3d{1.0, -2.0, 3.0};
|
||||
const double expected = 3.74165738677394;
|
||||
geom::Vector3D v3d{1.0, -2.0, 3.0};
|
||||
const double expected = 3.74165738677394;
|
||||
|
||||
SCTEST_CHECK_DEQ(v3d.magnitude(), expected);
|
||||
SCTEST_CHECK_DEQ(v3d.Magnitude(), expected);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -262,9 +262,9 @@ Vector3DoubleTests_Magnitude()
|
||||
static bool
|
||||
Vector3DoubleTests_Equality()
|
||||
{
|
||||
geom::Vector3d a {1.0, 2.0, 3.0};
|
||||
geom::Vector3d b {1.0, 2.0, 3.0};
|
||||
geom::Vector3d c {1.0, 2.0, 1.0};
|
||||
geom::Vector3D a {1.0, 2.0, 3.0};
|
||||
geom::Vector3D b {1.0, 2.0, 3.0};
|
||||
geom::Vector3D c {1.0, 2.0, 1.0};
|
||||
|
||||
SCTEST_CHECK_EQ(a, b);
|
||||
SCTEST_CHECK_EQ(b, a);
|
||||
@@ -278,9 +278,9 @@ Vector3DoubleTests_Equality()
|
||||
static bool
|
||||
Vector3DoubleTests_Addition()
|
||||
{
|
||||
geom::Vector3d a {1.0, 2.0, 3.0};
|
||||
geom::Vector3d b {4.0, 5.0, 6.0};
|
||||
geom::Vector3d expected {5.0, 7.0, 9.0};
|
||||
geom::Vector3D a {1.0, 2.0, 3.0};
|
||||
geom::Vector3D b {4.0, 5.0, 6.0};
|
||||
geom::Vector3D expected {5.0, 7.0, 9.0};
|
||||
|
||||
SCTEST_CHECK_EQ(a+b, expected);
|
||||
|
||||
@@ -291,9 +291,9 @@ Vector3DoubleTests_Addition()
|
||||
static bool
|
||||
Vector3DoubleTests_Subtraction()
|
||||
{
|
||||
geom::Vector3d a {1.0, 2.0, 3.0};
|
||||
geom::Vector3d b {4.0, 5.0, 6.0};
|
||||
geom::Vector3d c {5.0, 7.0, 9.0};
|
||||
geom::Vector3D a {1.0, 2.0, 3.0};
|
||||
geom::Vector3D b {4.0, 5.0, 6.0};
|
||||
geom::Vector3D c {5.0, 7.0, 9.0};
|
||||
|
||||
SCTEST_CHECK_EQ(c-b, a);
|
||||
|
||||
@@ -304,8 +304,8 @@ Vector3DoubleTests_Subtraction()
|
||||
static bool
|
||||
Vector3DoubleTests_ScalarMultiplication()
|
||||
{
|
||||
geom::Vector3d a {1.0, 2.0, 3.0};
|
||||
geom::Vector3d expected {3.0, 6.0, 9.0};
|
||||
geom::Vector3D a {1.0, 2.0, 3.0};
|
||||
geom::Vector3D expected {3.0, 6.0, 9.0};
|
||||
|
||||
SCTEST_CHECK_EQ(a * 3.0, expected);
|
||||
|
||||
@@ -316,8 +316,8 @@ Vector3DoubleTests_ScalarMultiplication()
|
||||
static bool
|
||||
Vector3DoubleTests_ScalarDivision()
|
||||
{
|
||||
geom::Vector3d a {1.0, 2.0, 3.0};
|
||||
geom::Vector3d b {3.0, 6.0, 9.0};
|
||||
geom::Vector3D a {1.0, 2.0, 3.0};
|
||||
geom::Vector3D b {3.0, 6.0, 9.0};
|
||||
|
||||
SCTEST_CHECK_EQ(b / 3.0, a);
|
||||
|
||||
@@ -328,8 +328,8 @@ Vector3DoubleTests_ScalarDivision()
|
||||
static bool
|
||||
Vector3DoubleTests_DotProduct()
|
||||
{
|
||||
geom::Vector3d a {1.0, 2.0, 3.0};
|
||||
geom::Vector3d b {4.0, 5.0, 6.0};
|
||||
geom::Vector3D a {1.0, 2.0, 3.0};
|
||||
geom::Vector3D b {4.0, 5.0, 6.0};
|
||||
|
||||
SCTEST_CHECK_DEQ(a * b, 32.0);
|
||||
|
||||
@@ -341,14 +341,14 @@ static bool
|
||||
Vector3DoubleTests_UnitVector()
|
||||
{
|
||||
// Test values randomly generated and calculated with numpy.
|
||||
geom::Vector3d vec3 {5.320264018493507, 5.6541812891273935, 1.9233435162644652};
|
||||
geom::Vector3d unit {0.6651669556972103, 0.7069150218815566, 0.24046636539587804};
|
||||
geom::Vector3d unit2;
|
||||
geom::Vector3D vec3 {5.320264018493507, 5.6541812891273935, 1.9233435162644652};
|
||||
geom::Vector3D unit {0.6651669556972103, 0.7069150218815566, 0.24046636539587804};
|
||||
geom::Vector3D unit2;
|
||||
|
||||
SCTEST_CHECK_EQ(vec3.unitVector(), unit);
|
||||
SCTEST_CHECK_FALSE(vec3.isUnitVector());
|
||||
SCTEST_CHECK(unit.isUnitVector());
|
||||
SCTEST_CHECK(unit2.isUnitVector());
|
||||
SCTEST_CHECK_EQ(vec3.UnitVector(), unit);
|
||||
SCTEST_CHECK_FALSE(vec3.IsUnitVector());
|
||||
SCTEST_CHECK(unit.IsUnitVector());
|
||||
SCTEST_CHECK(unit2.IsUnitVector());
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -357,13 +357,13 @@ Vector3DoubleTests_UnitVector()
|
||||
static bool
|
||||
Vector3DoubleTests_Angle()
|
||||
{
|
||||
geom::Vector3d a {0.3977933061361172, 8.053980094436525, 8.1287759943773};
|
||||
geom::Vector3d b {9.817895298608196, 4.034166890407462, 4.37628316513266};
|
||||
geom::Vector3d c {7.35, 0.221, 5.188};
|
||||
geom::Vector3d d {2.751, 8.259, 3.985};
|
||||
geom::Vector3D a {0.3977933061361172, 8.053980094436525, 8.1287759943773};
|
||||
geom::Vector3D b {9.817895298608196, 4.034166890407462, 4.37628316513266};
|
||||
geom::Vector3D c {7.35, 0.221, 5.188};
|
||||
geom::Vector3D d {2.751, 8.259, 3.985};
|
||||
|
||||
SCTEST_CHECK_DEQ(a.angle(b), 0.9914540426033251);
|
||||
if (!scmp::WithinTolerance(c.angle(d), (double)1.052, (double)0.001)) {
|
||||
SCTEST_CHECK_DEQ(a.Angle(b), 0.9914540426033251);
|
||||
if (!scmp::WithinTolerance(c.Angle(d), (double)1.052, (double)0.001)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -374,26 +374,26 @@ Vector3DoubleTests_Angle()
|
||||
static bool
|
||||
Vector3DoubleTests_ParallelOrthogonalVectors()
|
||||
{
|
||||
geom::Vector3d a {-2.029, 9.97, 4.172};
|
||||
geom::Vector3d b {-9.231, -6.639, -7.245};
|
||||
geom::Vector3d c {-2.328, -7.284, -1.214};
|
||||
geom::Vector3d d {-1.821, 1.072, -2.94};
|
||||
geom::Vector3d e {-2.0, 1.0, 3.0};
|
||||
geom::Vector3d f {-6.0, 3.0, 9.0};
|
||||
geom::Vector3d zeroVector {0.0, 0.0, 0.0};
|
||||
geom::Vector3D a {-2.029, 9.97, 4.172};
|
||||
geom::Vector3D b {-9.231, -6.639, -7.245};
|
||||
geom::Vector3D c {-2.328, -7.284, -1.214};
|
||||
geom::Vector3D d {-1.821, 1.072, -2.94};
|
||||
geom::Vector3D e {-2.0, 1.0, 3.0};
|
||||
geom::Vector3D f {-6.0, 3.0, 9.0};
|
||||
geom::Vector3D zeroVector {0.0, 0.0, 0.0};
|
||||
|
||||
SCTEST_CHECK_FALSE(a.isParallel(b));
|
||||
SCTEST_CHECK_FALSE(a.isOrthogonal(b));
|
||||
SCTEST_CHECK_FALSE(a.IsParallel(b));
|
||||
SCTEST_CHECK_FALSE(a.IsOrthogonal(b));
|
||||
|
||||
SCTEST_CHECK_FALSE(c.isParallel(d));
|
||||
SCTEST_CHECK(c.isOrthogonal(d));
|
||||
SCTEST_CHECK_FALSE(c.IsParallel(d));
|
||||
SCTEST_CHECK(c.IsOrthogonal(d));
|
||||
|
||||
SCTEST_CHECK(e.isParallel(f));
|
||||
SCTEST_CHECK_FALSE(e.isOrthogonal(f));
|
||||
SCTEST_CHECK(e.IsParallel(f));
|
||||
SCTEST_CHECK_FALSE(e.IsOrthogonal(f));
|
||||
|
||||
SCTEST_CHECK(zeroVector.isZero());
|
||||
SCTEST_CHECK(c.isParallel(zeroVector));
|
||||
SCTEST_CHECK(c.isOrthogonal(zeroVector));
|
||||
SCTEST_CHECK(zeroVector.IsZero());
|
||||
SCTEST_CHECK(c.IsParallel(zeroVector));
|
||||
SCTEST_CHECK(c.IsOrthogonal(zeroVector));
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -402,13 +402,13 @@ Vector3DoubleTests_ParallelOrthogonalVectors()
|
||||
static bool
|
||||
Vector3DoubleTests_Projections()
|
||||
{
|
||||
geom::Vector3d a {4.866769214609107, 6.2356222686140566, 9.140878417029711};
|
||||
geom::Vector3d b {6.135533104801077, 8.757851406697895, 0.6738031370548048};
|
||||
geom::Vector3d c {4.843812341655318, 6.9140509888133055, 0.5319465962229454};
|
||||
geom::Vector3d d {0.02295687295378901, -0.6784287201992489, 8.608931820806765};
|
||||
geom::Vector3D a {4.866769214609107, 6.2356222686140566, 9.140878417029711};
|
||||
geom::Vector3D b {6.135533104801077, 8.757851406697895, 0.6738031370548048};
|
||||
geom::Vector3D c {4.843812341655318, 6.9140509888133055, 0.5319465962229454};
|
||||
geom::Vector3D d {0.02295687295378901, -0.6784287201992489, 8.608931820806765};
|
||||
|
||||
SCTEST_CHECK_EQ(a.projectParallel(b), c);
|
||||
SCTEST_CHECK_EQ(a.projectOrthogonal(b), d);
|
||||
SCTEST_CHECK_EQ(a.ProjectParallel(b), c);
|
||||
SCTEST_CHECK_EQ(a.ProjectOrthogonal(b), d);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -417,12 +417,12 @@ Vector3DoubleTests_Projections()
|
||||
static bool
|
||||
Vector3DoubleTests_CrossProduct()
|
||||
{
|
||||
geom::Vector3d a {8.462, 7.893, -8.187};
|
||||
geom::Vector3d b {6.984, -5.975, 4.778};
|
||||
geom::Vector3d c {-11.2046, -97.6094, -105.685};
|
||||
geom::Vector3D a {8.462, 7.893, -8.187};
|
||||
geom::Vector3D b {6.984, -5.975, 4.778};
|
||||
geom::Vector3D c {-11.2046, -97.6094, -105.685};
|
||||
|
||||
c.setEpsilon(0.001); // double trouble
|
||||
SCTEST_CHECK_EQ(c, a.cross(b));
|
||||
c.SetEpsilon(0.001); // double trouble
|
||||
SCTEST_CHECK_EQ(c, a.Cross(b));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user