IAP GITLAB

Skip to content
Snippets Groups Projects
Line.h 1.36 KiB
Newer Older
/*
 * (c) Copyright 2018 CORSIKA Project, corsika-project@lists.kit.edu
 *
 * See file AUTHORS for a list of contributors.
 *
 * This software is distributed under the terms of the GNU General Public
 * Licence version 3 (GPL Version 3). See file LICENSE for a full version of
 * the license.
 */

#ifndef _include_LINETRAJECTORY_H
#define _include_LINETRAJECTORY_H

#include <corsika/geometry/Point.h>
#include <corsika/geometry/Vector.h>
#include <corsika/units/PhysicalUnits.h>
namespace corsika::geometry {
  class Line {
ralfulrich's avatar
ralfulrich committed

ralfulrich's avatar
ralfulrich committed
    using VelocityVec = Vector<corsika::units::si::SpeedType::dimension_type>;
    Point const r0;
    VelocityVec const v0;
  public:
    Line(Point const& pR0, VelocityVec const& pV0)
        : r0(pR0)
ralfulrich's avatar
ralfulrich committed
        , v0(pV0) {}

ralfulrich's avatar
ralfulrich committed
    Point GetPosition(corsika::units::si::TimeType t) const { return r0 + v0 * t; }
Maximilian Reininghaus's avatar
Maximilian Reininghaus committed

    Point PositionFromArclength(corsika::units::si::LengthType l) const {
      return r0 + v0.normalized() * l;
    }
    LengthType ArcLength(corsika::units::si::TimeType t1,
                         corsika::units::si::TimeType t2) const {
      return v0.norm() * (t2 - t1);
    }

    corsika::units::si::TimeType TimeFromArclength(
        corsika::units::si::LengthType t) const {
      return t / v0.norm();
    }

    auto GetR0() const { return r0; }
    auto GetV0() const { return v0; }
ralfulrich's avatar
ralfulrich committed
  };
} // namespace corsika::geometry
#endif