.. _program_listing_file_include_ruckig_velocity.hpp: Program Listing for File velocity.hpp ===================================== |exhale_lsh| :ref:`Return to documentation for file ` (``include/ruckig/velocity.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #pragma once #include #include namespace ruckig { class VelocityThirdOrderStep1 { using ReachedLimits = Profile::ReachedLimits; using ControlSigns = Profile::ControlSigns; const double a0, af; const double _aMax, _aMin, _jMax; // Pre-calculated expressions double vd; // Max 3 valid profiles using ProfileIter = std::array::iterator; std::array valid_profiles; void time_acc0(ProfileIter& profile, double aMax, double aMin, double jMax, bool return_after_found) const; void time_none(ProfileIter& profile, double aMax, double aMin, double jMax, bool return_after_found) const; // Only for zero-limits case bool time_all_single_step(Profile* profile, double aMax, double aMin, double jMax) const; inline void add_profile(ProfileIter& profile) const { const auto prev_profile = profile; ++profile; profile->set_boundary(*prev_profile); } public: explicit VelocityThirdOrderStep1(double v0, double a0, double vf, double af, double aMax, double aMin, double jMax); bool get_profile(const Profile& input, Block& block); }; class VelocityThirdOrderStep2 { using ReachedLimits = Profile::ReachedLimits; using ControlSigns = Profile::ControlSigns; const double a0, tf, af; const double _aMax, _aMin, _jMax; // Pre-calculated expressions double vd, ad; bool time_acc0(Profile& profile, double aMax, double aMin, double jMax); bool time_none(Profile& profile, double aMax, double aMin, double jMax); inline bool check_all(Profile& profile, double aMax, double aMin, double jMax) { return time_acc0(profile, aMax, aMin, jMax) || time_none(profile, aMax, aMin, jMax); } public: explicit VelocityThirdOrderStep2(double tf, double v0, double a0, double vf, double af, double aMax, double aMin, double jMax); bool get_profile(Profile& profile); }; class VelocitySecondOrderStep1 { const double _aMax, _aMin; double vd; // Pre-calculated expressions public: explicit VelocitySecondOrderStep1(double v0, double vf, double aMax, double aMin); bool get_profile(const Profile& input, Block& block); }; class VelocitySecondOrderStep2 { const double tf, _aMax, _aMin; double vd; // Pre-calculated expressions public: explicit VelocitySecondOrderStep2(double tf, double v0, double vf, double aMax, double aMin); bool get_profile(Profile& profile); }; } // namespace ruckig