1#ifndef PHYTH_CONSTRAINER_HPP
2#define PHYTH_CONSTRAINER_HPP
105 throw std::invalid_argument(
"DistanceConstrainer: interval minimum must be non-negative");
260 throw std::invalid_argument(
"AngleConstrainer: theta interval minimum must be >= -2pi");
263 throw std::invalid_argument(
"AngleConstrainer: phi interval minimum must be >= -2pi");
266 throw std::invalid_argument(
"AngleConstrainer: theta interval maximum must be <= 2pi");
269 throw std::invalid_argument(
"AngleConstrainer: phi interval maximum must be <= 2pi");
Constrains a particle's angular position around an anchor.
void IntervalCheck() const
Validate that angle intervals are within [-2pi, 2pi].
std::shared_ptr< Particle > particle_
Interval< Radian > phi_interval_
std::shared_ptr< Particle > anchor_
AngleConstrainer(std::shared_ptr< Particle > anchor, std::shared_ptr< Particle > particle)
Construct with automatic intervals set to initial angles.
Interval< Radian > theta_interval_
AngleConstrainer(std::shared_ptr< Particle > anchor, std::shared_ptr< Particle > particle, const Interval< Radian > &theta_interval, const Interval< Radian > &phi_interval)
Construct with custom theta and phi intervals.
AngleConstrainer(std::shared_ptr< Particle > anchor, std::shared_ptr< Particle > particle, const Interval< Radian > &theta_interval)
Construct with custom theta interval, phi fixed to initial value.
void Correct(const Quantity< Second > dt) const
Correct velocity to satisfy angular constraints (Velocity Constrain)
Constrains a particle's distance from an anchor within an interval.
DistanceConstrainer(std::shared_ptr< Particle > anchor, std::shared_ptr< Particle > particle)
Construct with automatic interval set to initial distance.
std::shared_ptr< Particle > anchor_
void Correct() const
Correct velocity to satisfy the distance constraint (Velocity Constrain)
Interval< Meter > interval_
std::shared_ptr< Particle > particle_
DistanceConstrainer(std::shared_ptr< Particle > anchor, std::shared_ptr< Particle > particle, const Interval< Meter > &interval)
Construct with a custom distance interval.
void IntervalCheck() const
Validate that the interval minimum is non-negative.
Scalar cos(const Scalar q)
Cosine of a dimensionless quantity.
Quantity< UnitT > fmod(Quantity< UnitT > x, Quantity< UnitT > y)
Floating-point remainder of x / y.
Scalar sin(const Scalar q)
Sine of a dimensionless quantity.
Compile-time physical dimension as 7 SI base exponents.
Closed interval [min, max] of physical quantities.
Quantity< UnitT > GetMaximum() const noexcept
bool Contains(Quantity< UnitT > x) const noexcept
Check if a value lies within the interval.
Quantity< UnitT > GetMinimum() const noexcept
Physical quantity with a value and a compile-time unit.
3D vector with Quantity components
Vector3< Scalar > Normalized() const
Normalized vector (unit vector in the same direction)