51 DragModel(
double drag_coefficient,
double reference_area_m2,
52 double air_density_kgpm3 = 1.225,
53 double linear_drag_coefficient_n_per_mps = 0.0)
54 : drag_coefficient_(drag_coefficient),
55 reference_area_m2_(reference_area_m2),
56 air_density_kgpm3_(air_density_kgpm3),
57 linear_drag_coefficient_n_per_mps_(linear_drag_coefficient_n_per_mps) {}
66 const Vector3& velocity_mps)
const {
68 reference_area_m2_, air_density_kgpm3_,
69 linear_drag_coefficient_n_per_mps_);
81 if (reference_area_m2 <= 0.0) {
82 reference_area_m2 = reference_area_m2_;
86 reference_area_m2, air_density_kgpm3_,
87 linear_drag_coefficient_n_per_mps_);
97 return Vector3(details.force.x, details.force.y, details.force.z);
107 return Vector3(details.force.x, details.force.y, details.force.z);
124 Vector3(details.force.x, details.force.y, details.force.z);
131 effective_gravity_mps2.
norm();
153 double drag_coefficient_{0.47};
154 double reference_area_m2_{0.02};
155 double air_density_kgpm3_{1.225};
156 double linear_drag_coefficient_n_per_mps_{0.0};
DragModel(double drag_coefficient, double reference_area_m2, double air_density_kgpm3=1.225, double linear_drag_coefficient_n_per_mps=0.0)
Constructs a drag force model.
Definition drag_model.hpp:51
Vector3 computeForce(const RigidBody &body) const
Computes drag force using body geometry.
Definition drag_model.hpp:105
Vector3::DragForceDetails computeForceDetailed(const RigidBody &body) const
Computes detailed drag force using body geometry and motion.
Definition drag_model.hpp:78
Vector3 computeForce(const Vector3 &velocity_mps) const
Computes drag force vector for a world-space velocity.
Definition drag_model.hpp:95
void apply(RigidBody &body) const
Applies computed drag force to a rigid body.
Definition drag_model.hpp:146
DragGravityComparison compareToEffectiveGravity(const RigidBody &body, const Vector3 &effective_gravity_mps2) const
Compares drag force magnitude against an effective gravity vector.
Definition drag_model.hpp:117
Vector3::DragForceDetails computeForceDetailed(const Vector3 &velocity_mps) const
Computes detailed drag force breakdown for a world-space velocity vector.
Definition drag_model.hpp:65
Simulated rigid body with translational/angular dynamics and optional aero metadata.
Definition rigid_body.hpp:44
void applyForce(const Vector3 &force_n)
Adds force at center of mass in newtons.
Definition rigid_body.hpp:431
double dragReferenceAreaM2(const Vector3 &velocity_world) const
Computes effective drag reference area for current geometry and motion direction.
Definition rigid_body.hpp:367
BodyFlags & flags()
Mutable access to runtime body flags.
Definition rigid_body.hpp:244
const Vector3 & linearVelocity() const
Returns world linear velocity in meters per second.
Definition rigid_body.hpp:163
double massKg() const
Returns mass in kilograms.
Definition rigid_body.hpp:106
bool is_kinematic
Definition body_flags.hpp:26
Diagnostic output comparing drag force to gravitational acceleration.
Definition drag_model.hpp:15
double effective_gravity_acceleration_mps2
Magnitude of effective gravity vector in m/s^2.
Definition drag_model.hpp:23
Vector3 drag_force
Computed drag force vector in newtons.
Definition drag_model.hpp:17
double body_mass_kg
Body mass used for acceleration calculations in kg.
Definition drag_model.hpp:27
bool valid
True when the comparison computed without invalid inputs or mass=0.
Definition drag_model.hpp:30
double drag_force_magnitude_n
Magnitude of drag_force in newtons.
Definition drag_model.hpp:19
double drag_to_gravity_ratio
Ratio of drag acceleration to gravity (>1 means drag dominates).
Definition drag_model.hpp:25
double drag_acceleration_mps2
Drag-induced acceleration magnitude in m/s^2.
Definition drag_model.hpp:21
Expanded drag diagnostics for force computation.
Definition vector.hpp:249
3D vector utility used throughout JSim physics.
Definition vector.hpp:22
double norm() const noexcept
Returns Euclidean magnitude.
Definition vector.hpp:114
static DragForceDetails dragForceDetailed(const Vector3 &v, double Cd, double A, double rho=1.225, double linear_drag_coefficient_n_per_mps=0.0) noexcept
Computes drag force details for a body moving through air.
Definition vector.hpp:287