diff --git a/Documentation/Examples/geometry_example.cc b/Documentation/Examples/geometry_example.cc index 418073fbadef83b15ac64a31a59ab45cb70bd7f8..742de1202d9a02c5e5c7b2889d46cae72793fbab 100644 --- a/Documentation/Examples/geometry_example.cc +++ b/Documentation/Examples/geometry_example.cc @@ -1,10 +1,3 @@ -/* - from within ngc/build/ directory: - g++ -O3 -I ../third_party/ -I<path to eigen> -I ../ -Wall -pedantic \ - -std=c++14 ../Main/geometry_example.cc \ - ../Framework/Geometry/CoordinateSystem.cc -o geometry_example -*/ - #include <Geometry/Vector.h> #include <Geometry/Sphere.h> #include <Geometry/Point.h> @@ -12,32 +5,58 @@ #include <Units/PhysicalUnits.h> #include <iostream> +#include <typeinfo> #include <cstdlib> -using namespace phys::units; +using namespace phys::units; +using namespace phys::units::io; // support stream << unit +using namespace phys::units::literals; // support unit literals like 5_m; int main() { - using namespace phys::units; - using namespace phys::units::io; - using namespace phys::units::literals; - + //~ // define the root coordinate system CoordinateSystem root; - Point const p1(root, {0_m, 0_m, 0_m}); + + // another CS defined by a translation relative to the root CS CoordinateSystem cs2 = root.translate({0_m, 0_m, 1_m}); - Point const p2(cs2, {0_m, 0_m, 0_m}); - Vector<length_d> const diff = p2 - p1; - auto const norm = diff.squaredNorm(); + // rotations are possible, too; parameters are axis vector and angle + CoordinateSystem cs3 = root.rotate({1_m, 0_m, 0_m}, 90 * degree_angle); + + // now let's define some geometrical objects: + Point const p1(root, {0_m, 0_m, 0_m}); // the origin of the root CS + Point const p2(cs2, {0_m, 0_m, 0_m}); // the origin of cs2 + + Vector<length_d> const diff = p2 - p1; // the distance between the points, basically the translation vector given above + auto const norm = diff.squaredNorm(); // squared length with the right dimension - std::cout << "p2-p1 components: " << diff.getComponents() << std::endl; + // print the components of the vector as given in the different CS + std::cout << "p2-p1 components in root: " << diff.getComponents(root) << std::endl; + std::cout << "p2-p1 components in cs2: " << diff.getComponents(cs2) << std::endl; // by definition invariant under translations + std::cout << "p2-p1 components in cs3: " << diff.getComponents(cs3) << std::endl; // but not under rotations std::cout << "p2-p1 norm^2: " << norm << std::endl; - Sphere s(p1, 10_m); - std::cout << "p1 inside s: " << s.isInside(p2) << std::endl; + Sphere s(p1, 10_m); // define a sphere around a point with a radius + //~ std::cout << "p1 inside s: " << s.isInside(p2) << std::endl; + + Sphere s2(p1, 3_um); // another sphere + //~ std::cout << "p1 inside s2: " << s2.isInside(p2) << std::endl; + + + // let's try parallel projections: + auto const v1 = Vector<length_d>(root, {1_m, 1_m, 0_m}); + auto const v2 = Vector<length_d>(root, {1_m, 0_m, 0_m}); + + auto const v3 = v1.parallelProjectionOnto(v2); + + auto const cross = v1.cross(v2).normalized(); - Sphere s2(p1, 3_um); - std::cout << "p1 inside s2: " << s2.isInside(p2) << std::endl; + // if a CS is not given as parameter for getComponents(), the components + // in the "home" CS are returned + std::cout << v1.getComponents() << std::endl; + std::cout << v2.getComponents() << std::endl; + std::cout << v3.getComponents() << std::endl; + std::cout << cross.getComponents() << std::endl; return EXIT_SUCCESS; }