LCOV - code coverage report
Current view: top level - src - Geometry.cpp (source / functions) Coverage Total Hit
Test: coverage.info.cleaned Lines: 36.0 % 50 18
Test Date: 2026-07-13 06:03:10 Functions: 46.2 % 13 6

            Line data    Source code
       1              : #include <limits>
       2              : #include <cmath>
       3              : #include "kiss/logger.h"
       4              : #include "crpropa/Geometry.h"
       5              : 
       6              : namespace crpropa {
       7              : 
       8              : // Plane ------------------------------------------------------------------
       9            1 : Plane::Plane(const Vector3d& _x0, const Vector3d& _n) : x0(_x0), n(_n) {
      10            1 : };
      11              : 
      12            0 : Plane::Plane(const Vector3d& _x0, const Vector3d& v1,const Vector3d& v2) : x0(_x0), n(0,0,0) {
      13              :         n = v1.cross(v2);
      14              :         n /= n.getR();
      15            0 : };
      16              : 
      17            2 : double Plane::distance(const Vector3d &x) const {
      18              :         Vector3d dX = x - x0;
      19            2 :         return n.dot(dX);
      20              : };
      21              : 
      22            0 : std::string Plane::getDescription() const {
      23            0 :         std::stringstream ss;
      24              :         ss << "Plane: " << std::endl
      25            0 :            << "   x0: " << x0 << std::endl
      26            0 :            << "    n: " << n << std::endl;
      27            0 :         return ss.str();
      28            0 : };
      29              : 
      30            0 : Vector3d Plane::normal(const Vector3d& point) const {
      31            0 :         return n;
      32              : }
      33              : 
      34              : // Sphere ------------------------------------------------------------------
      35            4 : Sphere::Sphere(const Vector3d& _center, double _radius) : center(_center), radius(_radius) {
      36            4 : };
      37              : 
      38           12 : double Sphere::distance(const Vector3d &point) const {
      39              :         Vector3d dR = point - center;
      40           12 :         return dR.getR() - radius;
      41              : }
      42              : 
      43            0 : Vector3d Sphere::normal(const Vector3d& point) const {
      44              :         Vector3d d = point - center;
      45            0 :         return d.getUnitVector();
      46              : }
      47              : 
      48            0 : std::string Sphere::getDescription() const {
      49            0 :         std::stringstream ss;
      50              :         ss << "Sphere: " << std::endl
      51            0 :                 << "   Center: " << center << std::endl
      52            0 :                 << "   Radius: " << radius << std::endl;
      53            0 :         return ss.str();
      54            0 : };
      55              : 
      56              : 
      57              : // ParaxialBox -------------------------------------------------------------
      58            1 : ParaxialBox::ParaxialBox(const Vector3d& _corner, const Vector3d& _size) : corner(_corner), size(_size) {
      59            1 : };
      60              : 
      61            6 : double ParaxialBox::distance(const Vector3d &point) const {
      62              :         Vector3d X = point - corner - size/2.;
      63              : 
      64              :         // inside the cube
      65            6 :         if ((fabs(X.x) <= size.x/2.) and (fabs(X.y) <= size.y/2.) and (fabs(X.z) <= size.z/2.)) { 
      66              :                 Vector3d Xp = size/2. - X.abs();
      67            3 :                 double d = std::min(Xp.x, std::min(Xp.y, Xp.z));
      68              : 
      69            3 :                 return -1. * d;
      70              :         }
      71              : 
      72            3 :         double a = std::max(0., fabs(X.x) - size.x/2.);
      73            3 :         double b = std::max(0., fabs(X.y) - size.y/2.);
      74            3 :         double c = std::max(0., fabs(X.z) - size.z/2.);
      75              : 
      76            3 :         return sqrt(a*a + b*b +c*c);
      77              : }
      78              : 
      79            0 : Vector3d ParaxialBox::normal(const Vector3d& point) const {
      80              :         Vector3d d = (point - corner).abs();
      81              :         Vector3d d2 = d + size;
      82              :         Vector3d n;
      83              :         double dmin = std::numeric_limits<double>::infinity();
      84            0 :         if (d.x < dmin) {
      85              :                 dmin = d.x;
      86              :                 n = Vector3d(-1, 0, 0);
      87              :         }
      88            0 :         if (d.y < dmin) {
      89              :                 dmin = d.y;
      90              :                 n = Vector3d(0, -1, 0);
      91              :         }
      92            0 :         if (d.z < dmin) {
      93              :                 dmin = d.z;
      94              :                 n = Vector3d(0, 0, -1);
      95              :         }
      96            0 :         if (d2.x < dmin) {
      97              :                 dmin = d2.x;
      98              :                 n = Vector3d(1, 0, 0);
      99              :         }
     100            0 :         if (d2.y < dmin) {
     101              :                 dmin = d2.y;
     102              :                 n = Vector3d(0, 1, 0);
     103              :         }
     104            0 :         if (d2.z < dmin) {
     105              :                 // dmin = d2.z;
     106              :                 n = Vector3d(0, 0, 1);
     107              :         }
     108              : 
     109            0 :         return n;
     110              : }
     111              : 
     112            0 : std::string ParaxialBox::getDescription() const {
     113            0 :         std::stringstream ss;
     114              :         ss << "ParaxialBox: " << std::endl
     115            0 :                 << "   corner: " << corner << std::endl
     116            0 :                 << "     size: " << size << std::endl;
     117            0 :         return ss.str();
     118            0 : };
     119              : 
     120              : } // namespace
        

Generated by: LCOV version 2.0-1