From 859e8402bcd8d07f2cd559d2818483e9176ff115 Mon Sep 17 00:00:00 2001 From: Alan Coleman <alanco@umich.edu> Date: Mon, 13 Feb 2023 16:37:13 +0000 Subject: [PATCH] Added subtraction operator to Point, added tests --- corsika/detail/framework/geometry/Point.inl | 6 +++++- corsika/framework/geometry/Point.hpp | 1 + tests/framework/testGeometry.cpp | 16 +++++++++++++++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/corsika/detail/framework/geometry/Point.inl b/corsika/detail/framework/geometry/Point.inl index 156723dd1..ffd783292 100644 --- a/corsika/detail/framework/geometry/Point.inl +++ b/corsika/detail/framework/geometry/Point.inl @@ -67,11 +67,15 @@ namespace corsika { return Point(cs, getCoordinates() + pVec.getComponents(cs)); } + inline Point Point::operator-(Vector<length_d> const& pVec) const { + CoordinateSystemPtr const& cs = BaseVector<length_d>::getCoordinateSystem(); + return Point(cs, getCoordinates() - pVec.getComponents(cs)); + } + inline Vector<length_d> Point::operator-(Point const& pB) const { CoordinateSystemPtr const& cs = BaseVector<length_d>::getCoordinateSystem(); return Vector<length_d>(cs, getCoordinates() - pB.getCoordinates(cs)); } - inline std::ostream& operator<<(std::ostream& os, corsika::Point const& p) { auto const& qv = p.getCoordinates(); os << qv << " (ref:" << fmt::ptr(p.getCoordinateSystem()) << ")"; diff --git a/corsika/framework/geometry/Point.hpp b/corsika/framework/geometry/Point.hpp index 6eb8786c9..09aaa1f50 100644 --- a/corsika/framework/geometry/Point.hpp +++ b/corsika/framework/geometry/Point.hpp @@ -72,6 +72,7 @@ namespace corsika { inline void rebase(CoordinateSystemPtr const& pCS); inline Point operator+(Vector<length_d> const& pVec) const; + inline Point operator-(Vector<length_d> const& pVec) const; /*! * returns the distance Vector between two points diff --git a/tests/framework/testGeometry.cpp b/tests/framework/testGeometry.cpp index 85fef905f..8cc52855a 100644 --- a/tests/framework/testGeometry.cpp +++ b/tests/framework/testGeometry.cpp @@ -60,6 +60,20 @@ TEST_CASE("Geometry CoordinateSystems") { CHECK(testV3.getNorm() / (tesla * meter) == Approx(6)); } + SECTION("point") { + Point const p00 = Point(rootCS, {0_m, 0_m, 0_m}); + Point const p01 = Point(rootCS, {3_m, 3_m, 3_m}); + Point const p02 = Point(rootCS, {1_m, -5_m, 6_m}); + + LengthVector const d01 = p00 - p01; + LengthVector const d12 = p01 - p02; + LengthVector const d20 = p02 - p00; + + CHECK(d12.getNorm() / (p01 - p02).getNorm() == Approx(1)); + CHECK(d12.getNorm() / distance(p01, p02) == Approx(1)); + CHECK(d12.getNorm() / distance(p02, p01) == Approx(1)); + } + SECTION("translations") { QuantityVector<length_d> const translationVector{0_m, 4_m, 0_m}; CORSIKA_LOG_INFO("QuantityVector<length_d> translationVector={}", translationVector); @@ -527,4 +541,4 @@ TEST_CASE("Path") { P3.removeFromEnd(); CHECK(P3.getNSegments() == Approx(0)); } -} \ No newline at end of file +} -- GitLab