IAP GITLAB

Skip to content
Snippets Groups Projects
Helix.h 924 B
Newer Older
Maximilian Reininghaus's avatar
Maximilian Reininghaus committed
#ifndef _include_HELIX_H_
#define _include_HELIX_H_

#include <Geometry/Vector.h>
#include <Geometry/Point.h>
#include <Units/PhysicalUnits.h>

class Helix // TODO: inherit from to-be-implemented "Trajectory"
{
    using SpeedVec = Vector<Speed>;
Maximilian Reininghaus's avatar
Maximilian Reininghaus committed
    
    Point const r0;
    Frequency const omegaC;
Maximilian Reininghaus's avatar
Maximilian Reininghaus committed
    SpeedVec const vPar;
    SpeedVec vPerp, uPerp;
    
Maximilian Reininghaus's avatar
Maximilian Reininghaus committed
public:
    Helix(Point const pR0, phys::units::quantity<phys::units::frequency_d> pOmegaC,
        SpeedVec const pvPar, SpeedVec const pvPerp) :
        r0(pR0), omegaC(pOmegaC), vPar(pvPar), vPerp(pvPerp), uPerp(vPar.normalized().cross(vPerp)),
        radius(pvPar.norm() / pOmegaC)
    auto getPosition(Time t) const
Maximilian Reininghaus's avatar
Maximilian Reininghaus committed
    {
        return r0 + vPar * t + (vPerp * (cos(omegaC * t) - 1) + uPerp * sin(omegaC * t)) / omegaC;
    }
    
    auto getRadius() const
    {
        return radius;
    }
Maximilian Reininghaus's avatar
Maximilian Reininghaus committed
};

#endif